使用正規表示式匹配單字時,b 邊界模式有時會產生意外的結果,特別是當單字包含特殊字元時字元。
考慮「test Sortesindex[persons]{Sortes} text」這個片語。使用 b
形式上,b 符合單字字元 (w) 和非單字字元之間的邊界(W),或字串的開頭/結尾。當單字邊界模式後面跟著一個特殊字元(如 [ 或 })時,b 只需要在特殊字元後面有一個單字字元。
要解決對於這個問題,可以使用自適應單字邊界或明確的單字邊界。
自適應單字邊界處理模式兩側的單字和非單字字元的任意組合:
re.search(r'(?:(?!\w)|\b(?=\w)){}(?:(?<=\w)\b|(?<!\w))'.format(re.escape('Sortes\index[persons]{Sortes}')), 'test Sortes\index[persons]{Sortes} test')
明確的單字邊界 要求模式兩側沒有單字字元:
re.search(r'(?<!\w){}(?!\w)'.format(re.escape('Sortes\index[persons]{Sortes}')), 'test Sortes\index[persons]{Sortes} test')
自適應字邊界更通用,但允許前導和尾隨非單字字元。明確的單字邊界更加嚴格,確保沒有周圍的單字字元。
用於自適應和明確單字邊界的環視模式可以根據匹配任務的具體要求進行客製化。例如,若要僅符合模式周圍的非字母,請使用 [^Wd_] 而不是 w.
以上是為什麼正規表示式單字邊界 (\b) 對特殊字元表現不佳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!