re.search(r"\b\+359\b","Is your phone number +359 887438?")
为什么这个正则表达式找不到+359
?如何让\b
考虑以+
开头的单词?
答案 0 :(得分:4)
您无法改变\b
的行为。你必须使用不同的锚;比如\B
,它匹配单词开头或结尾处不的任何地方;它是\b
的反转:
\B\+359\b
如果在+
之前没有单词字符,则它再次匹配,其本身是非单词字符。 \b
只能匹配单词和非单词字符(WORD\bNONWORD
或NONWORD\bWORD
),\B
需要两个非单词或两个单词字符才能匹配(WORD\BWORD
}或NONWORD\BNONWORD
)。由于+
是非字符字符,因此+
之前的任何内容都必须也为非字字符。
或者,您可以使用否定的后视:
(?<!\w)\+359\b
(?<!\w)
否定后卫断言仅匹配位置前没有单词字符的位置。
演示:
>>> import re
>>> re.search(r"\b\+359\b","Is your phone number +359 887438?")
>>> re.search(r"\B\+359\b","Is your phone number +359 887438?")
<_sre.SRE_Match object at 0x10cf03850>
>>> re.search(r"(?<!\w)\+359\b","Is your phone number +359 887438?")
<_sre.SRE_Match object at 0x10cf03d30>