re.search(r"\b\+359\b","Is your phone number +359 887438?")


为什么此正则表达式找不到+359,我如何让\b考虑以+开头的单词?

最佳答案

您不能更改\b的行为。您必须使用其他锚点;例如\B,它可以匹配单词开头或结尾以外的任何地方;它是\b的逆:

\B\+359\b


如果在+之前没有单词字符,该字符本身又是非单词字符,则这再次匹配。 \b只能在单词和非单词字符之间匹配(因此WORD\bNONWORDNONWORD\bWORD),而\B需要两个非单词或两个单词字符进行匹配(因此WORD\BWORDNONWORD\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/

10-09 08:37
查看更多