例如,我有以下字符串:"http://www.google.com/this_is_our_network/"
如何使用正則表達式來匹配帶邊界的單詞?
我想匹配單詞「工作」,但在開始或結束時沒有字母字符。在上面的例子中,正則表達式不應該返回一個匹配。
但是,在這個字符串中:"http://www.google.com/work_for_us.html"
正則表達式應該找出匹配,因爲在開始和結束時都沒有字母字符。
例如,我有以下字符串:"http://www.google.com/this_is_our_network/"
如何使用正則表達式來匹配帶邊界的單詞?
我想匹配單詞「工作」,但在開始或結束時沒有字母字符。在上面的例子中,正則表達式不應該返回一個匹配。
但是,在這個字符串中:"http://www.google.com/work_for_us.html"
正則表達式應該找出匹配,因爲在開始和結束時都沒有字母字符。
試試這個正則表達式:(?<=[\W_])work(?=[\W_])
它使用積極前瞻,看看隱藏斷言尊重封閉字符,但不包括他們在比賽中。
此正則表達式匹配work
\W
字符或下劃線 \W
字符或下劃線。\b
的單詞邊界匹配不能因爲_
比賽\w
這裏沒有想要使用。
進一步的實例:
匹配的多個詞:(?<=[\W_])(work|job)(?=[\W_])
同上,但不創建子匹配:(?<=[\W_])(?:work|job)(?=[\W_])
另外尊重線端:(?<=[\W_])(?:work|job)(?=[\W_]|$)
一些有用的筆記關於正則表達式的語法:
\w
匹配所有字母數字字符和下劃線;這等同於[a-zA-Z0-9_]
\W
的\w
\b
匹配邊界的\w
和\W
字符(或反之亦然)
正先行斷言之間完全相反的相符:foo(?=bar)
匹配foo
後面跟着bar
,不包括bar
在比賽中。
正向後看斷言:(?<=foo)bar
匹配bar
如果按照foo
,而不包括在比賽foo
。
有關的進一步信息(蟒)的正則表達式語法考慮python regex docs或perl regex docs。此外,基於網絡的Python Regex Tool便於測試。
你只是忘了'_'不是一個邊界... – JBernardo 2012-08-04 12:34:17
@Jernardo謝謝,我會糾正我的答案。 – speakr 2012-08-04 12:36:51
謝謝 - 這個伎倆。 如果你可以進一步解釋,這將是很好的。 – DjangoPy 2012-08-04 12:57:21