2013-10-18 46 views
0

我正试图做一个全字匹配,并且\ b标志匹配不是字边界的东西。我的正则表达式目前看起来是这样的:re模块使用 w时 w的不同行为 b

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

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

+0

你可以*给出一个实际的例子输入*和期望的输出... –

+0

对不起 - 以为我很清楚。更新。 – Smerk

回答

2

\b表示单词字符(字母数字和_)与非单词字符之间的边界。在这种情况下,您希望具有零宽度的负向后视和前视;使用“非空白字符”原子\S

尝试:

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

(?<!\S)手段和(?!\S)的意思是“如果不通过一个非空白字符前面有”`如果不是由非空白字符成功。

+1

'r'(?<= \ s)T5(?= \ s)'? –

+0

谢谢你们!这两个正则表达式都很完美。我正在添加一个正则表达式书到我的圣诞节列表中... – Smerk

+0

@RohitJain实际上你的匹配在字符串的开头 –

相关问题