正则表达式\ b字边界不适用于“!”

时间:2015-11-14 16:28:09

标签: python python-2.7

无法搜索

>>> x = "address !152.1.1.1"
>>> y = "!152.1.1.1"
>>> import re
>>> re.search('\\b' +y+ '\\b', x)

如果我删除“!”然后能够搜索

>>> x = "address !152.1.1.1"
>>> y = "152.1.1.1"
>>> re.search('\\b' +y+ '\\b', x)  
<_sre.SRE_Match object at 0xb7454a30>

1 个答案:

答案 0 :(得分:2)

呀,您需要使用\B,因为\b和空格之间不存在单词边界!

re.search(r'\B' + y+ r'\b', x)

Note: \b匹配单词char和非单词字符(反之亦然),而\B\b相反,它匹配两个单词字符或两个非单词字符。在第一个示例中,\B非单词)之间存在非单词边界!,作为{{1}中出现的值的起始字符}和y之前存在的空格(非单词)。

示例:

!

但在第二个示例中,启动char是>>> import re >>> x = "address !152.1.1.1" >>> y = "!152.1.1.1" >>> re.search(r'\B' +y+ r'\b', x) <_sre.SRE_Match object at 0x7f0aa3842100> >>> word char ),并且char存在于1之前(输入字符串上的 )是152非单词字符)。所以这里必须有一个单词边界!