2014-07-15 40 views
1

爲什麼不是字邊界工作?Python正則表達式字邊界不按預期方式工作

閱讀this site,我知道一個單詞的邊界是這樣的:

有跡象表明,有資格作爲單詞邊界的三個不同位置:

  • 字符串中的第一個字符之前,如果第一個字符是一個字的字符。
  • 在字符串中的最後一個字符後面,如果最後一個字符是單詞字符。
  • 字符串中的兩個字符之間,其中一個是單詞字符,另一個不是單詞字符。

下面的a字符串似乎適合至少一個上面列出的位置。

a = 'Builders Club The Ohio State' 
re.sub('\bThe\b', '', a, flags=re.IGNORECASE) 

輸出。 'The'沒有變化。

'Builders Club The Ohio State' 

爲什麼不是字邊界的工作?

當我在'The'模式之前和之後放置空格時,正則表達式似乎工作。

a = 'Builders Club The Ohio State' 
re.sub(' The ', ' ', a, flags=re.IGNORECASE) 

輸出:

'Builders Club Ohio State' 

回答

7

您需要使用您的正則表達式模式的raw-string(不處理轉義序列):

>>> import re 
>>> a = 'Builders Club The Ohio State' 
>>> re.sub(r'\bThe\b', '', a, flags=re.IGNORECASE) 
'Builders Club Ohio State' 
>>> 

否則,\b將被解釋爲一個退格字符:

>>> print('x\by') 
y 
>>> print(r'x\by') 
x\by 
>>> 
+1

爲了詳細說明:反斜線在正常的字符串,因此轉義字符'\ B'就像變成[一退格字符](https://docs.python.org/2.0/ref/strings.html)。所以無論你需要使用'\\ b'還是一個原始字符串文字。 – Joey

+0

通常,每當使用正則表達式時,使用原始字符串是一個好主意。 – RevanProdigalKnight

+0

啊ic。如果我使用r「它會搞亂其他字符,比如^和$? – user3314418

1

試試這個

import re 
p = re.compile(ur'\bThe\b', re.IGNORECASE) 
test_str = u"Builders Club The Ohio State" 
subst = u"" 

result = re.sub(p, subst, test_str) 

輸出:

Builders Club Ohio State 

下面是DEMO

相關問題