如何让\ b接受以' +'开头的单词?在python中使用正则表达式?

时间:2014-04-22 17:18:01

标签: python regex

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

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

1 个答案:

答案 0 :(得分:4)

您无法改变\b的行为。你必须使用不同的锚;比如\B,它匹配单词开头或结尾处的任何地方;它是\b的反转:

\B\+359\b

如果在+之前没有单词字符,则它再次匹配,其本身是非单词字符。 \b只能匹配单词和非单词字符(WORD\bNONWORDNONWORD\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>