re module使用\ b时\ w的不同行为

时间:2013-10-18 15:01:08

标签: python regex

我正在尝试立即进行全字匹配,\ b标志匹配不是字边界的东西。我的正则表达式目前看起来像这样:

m = re.compile(r'\bT5\b')

这适用于大多数“T5”的出现,但\ b将匹配符号,如$,或#,或!。因此,像'#T5'或'!T5'这样的字符串将匹配上面的正则表达式。这些符号与我系统上的\ w标志不匹配。我想要匹配的是'T5'或'T5'或'T5'中的'T5' - 基本上是围绕它的空白字符串,或者是围绕它的空字符串。我在这里做错了吗?我没有发现任何提及\ b和\ w之间的差异。我如何调整我的正则表达式,使其与上述符号不匹配?

1 个答案:

答案 0 :(得分:2)

\b表示单词字符(字母数字和_)与非单词字符之间的边界。在这种情况下,你想要一个零宽度负面的后视和前瞻;使用“非空白字符”原子\S

尝试:

m = re.compile(r'(?<!\S)T5(?!\S)')

(?<!\S)表示“如果没有非空白字符前面”,(?!\S)表示“如果没有非空白字符成功。”