re.search(r"\b\+359\b","Is your phone number +359 887438?")
为什么此正则表达式找不到
+359
,我如何让\b
考虑以+
开头的单词? 最佳答案
您不能更改\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>
关于python - 如何在Python中使用正则表达式使\b接受以'+'开头的单词?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23226160/