正規表示式如何有效率地匹配字串中的整個單字?

Barbara Streisand
發布: 2024-11-19 03:53:02
原創
649 人瀏覽過

How Can Regular Expressions Efficiently Match Whole Words in Strings?

使用正規表示式動態比對字串中的整個單字

要判斷句子中是否存在單字,可以使用正規表示式。鑑於單字通常由空格分隔,但兩側可能有標點符號,因此必須防止部分單字匹配。

一種方法是為出現在中間、開頭和結尾的單字定義單獨的正規表示式模式字串如下:

match_middle_words = " [^a-zA-Z\d ]{0,}" + word + "[^a-zA-Z\d ]{0,} "
match_starting_word = "^[^a-zA-Z\d]{0,}" + word + "[^a-zA-Z\d ]{0,} "
match_end_word = " [^a-zA-Z\d ]{0,}" + word + "[^a-zA-Z\d]{0,}$"
登入後複製

但是,這需要定義和組合多個正規則表達式模式。更簡化的方法是利用單字邊界 (b):

match_string = r'\b' + word + r'\b'
登入後複製

此模式確保僅在單字被非單字字元包圍時才捕獲單字。對於單字清單(例如,在變數“words”中),請使用:

match_string = r'\b(?:{})\b'.format('|'.join(words))
登入後複製

此方法有效地確保捕獲整個單詞,而不需要多個模式。

注意關於單字邊界

對於涉及帶有特殊字元的單字或單字邊界與空格不同的更複雜的場景,可以使用替代邊界定義被雇用。明確的單字邊界排除以特殊字元開頭/結尾的單字:

match_string = r'(?<!\w){}(?!\w)'.format(re.escape(word))
登入後複製

空白邊界將空格和字串開頭/結尾視為單字邊界:

match_string = r'(?<!\S){}(?!\S)'.format(word)
登入後複製

透過利用這些技術,匹配字串中的整個單字可以被簡化,確保結果準確一致。

以上是正規表示式如何有效率地匹配字串中的整個單字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板