使用正規表示式動態比對字串中的整個單字
要判斷句子中是否存在單字,可以使用正規表示式。鑑於單字通常由空格分隔,但兩側可能有標點符號,因此必須防止部分單字匹配。
一種方法是為出現在中間、開頭和結尾的單字定義單獨的正規表示式模式字串如下:
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中文網其他相關文章!