2013-10-18 44 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實際上你的匹配在字符串的開頭 –

相關問題