python - 正则表达式\b 字边界不适用于 "!"

标签 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>

最佳答案

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

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

注意: \b 匹配单词字符和非单词字符(反之亦然),而 \B 则相反\b 匹配两个单词字符或两个非单词字符。在第一个示例中,! 之间存在非单词边界 \B(非单词),它作为单词的起始字符y 中存在的值以及 ! 之前存在的空格(非单词)。

示例:

>>> 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>
>>> 

但在第二个示例中,起始字符为 1(单词字符),并且该字符存在于 152 之前(在输入字符串)是!(非单词字符)。所以这里一定有一个字边界\b

关于python - 正则表达式\b 字边界不适用于 "!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33710608/

相关文章:

python - OpenCV:selectROI返回零元组

python - 是否可以将一维张量转换为列表? ( tensorflow )

python - PyQT 窗口 : I want to remember the location it was closed at

python - 是否可以构造一个utf-8编解码器无法编码的unicode字符串?

python - 使用python的请求模块通过单选按钮登录网站

python - 训练好的 Keras 模型无法使用 load_model 加载

python - 错误: Could not locate a Flask application in VSCode

python - 如何从 Python 中的十六进制字符串中删除 '\x'?

python - 如何在 Windows 上 pip 或 easy_install tkinter

python - 如何在 DataFrame 中选择多个分散的列?