雖然試圖學習更多關於正則表達式的知識,但教程建議您可以使用\ b來匹配單詞邊界。然而,由於預計在Python解釋器下面的代碼片段不起作用:Python重新模塊支持單詞邊界( b)嗎?
>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)
Ÿ應該有一個匹配對象,如果什麼是匹配的,但它是無。 \ b表達式在Python中是不支持的還是我用它錯了?
感謝您的任何幫助。
雖然試圖學習更多關於正則表達式的知識,但教程建議您可以使用\ b來匹配單詞邊界。然而,由於預計在Python解釋器下面的代碼片段不起作用:Python重新模塊支持單詞邊界( b)嗎?
>>> x = 'one two three'
>>> y = re.search("\btwo\b", x)
Ÿ應該有一個匹配對象,如果什麼是匹配的,但它是無。 \ b表達式在Python中是不支持的還是我用它錯了?
感謝您的任何幫助。
你爲什麼不嘗試
word = 'two'
re.compile(r'\b%s\b' % word, re.I)
輸出:
>>> word = 'two'
>>> k = re.compile(r'\b%s\b' % word, re.I)
>>> x = 'one two three'
>>> y = k.search(x)
>>> y
<_sre.SRE_Match object at 0x100418850>
也忘了提,你應該在你的代碼中使用原始字符串
>>> x = 'one two three'
>>> y = re.search(r"\btwo\b", x)
>>> y
<_sre.SRE_Match object at 0x100418a58>
>>>
有趣的是,感謝您的工作示例。你有什麼洞察力,爲什麼我選擇的方法不起作用?這兩種方法應該是一樣的,只是在你的方法中你只編譯一次。 – 2010-10-22 08:42:54
@darren:看到我的最後一個例子,它改進了你的工作。我提供了原始字符串進行搜索。 – pyfunc 2010-10-22 08:44:59
ahh在你和Bolo的建議後,這是因爲我沒有使用原始字符串。謝謝! – 2010-10-22 08:46:42
這將工作:re.search(r"\btwo\b", x)
當您在Python中編寫"\b"
時,它是單個字符:"\x08"
。要麼逃避這樣的反斜線:
"\\b"
或寫入原始字符串是這樣的:
r"\b"
這真的幫助了我......我正在用pyspark rlike正則表達式掙扎,並且無法弄清楚爲什麼\ b(字邊界)不起作用。謝謝 – jb1t 2016-06-17 23:09:14
Python文檔
https://docs.python.org/2/library/re.html#regular-expression-syntax
\ b
匹配空字符串,但僅限於單詞的開頭或結尾。一個單詞被定義爲一個字母數字或下劃線字符序列,因此單詞的末尾用空格或非字母數字,非下劃線字符表示。請注意,在形式上,\ b被定義爲\ w和\ w字符之間的邊界(反之亦然),或\ w和字符串的開始/結尾之間的邊界,所以被認爲是字母數字的精確字符集取決於在UNICODE和LOCALE標誌的值上。例如,r'\ bfoo \ b'匹配'foo','foo。','(foo)','bar foo baz',但不匹配'foobar'或'foo3'。在字符範圍內,\ b代表退格字符,以便與Python的字符串文字兼容。
這將工作:'re.search(r「\ btwo \ b」,x)' – Bolo 2010-10-22 08:39:13
爲什麼不使用「原始」字符串? 'R 「\ btwo \ B」'? – 2010-10-22 10:56:13
關於'\ b的人們[經常感到困惑](http://stackoverflow.com/questions/4213800/is-there-something-like-a-counter-variable-in-regular-expression-replace/4214173#4214173) '。 – tchrist 2010-11-18 13:55:08