2013-05-28 44 views
3

我正在使用正則表達式在Python中編寫一個程序。我有麻煩,因爲我認爲應該匹配一個字符串的表達式不會這樣做。這是再現我的問題的Python代碼:在Python中的正則表達式不mach字符串(但它在檢查rubular時確實)

regex = re.compile(r"ord(er)? *0?([1-4])", re.I) 
m = regex.match("CMord01") 

m的計算結果爲FALSE。 我非常想知道爲什麼。 我檢查了http://rubular.com/,並且表達式與預期的字符串匹配。 謝謝!

+6

使用'regex.search()'而不是'regex.match()'。請參閱Python文檔中的['search()vs. match()'](http://docs.python.org/2/library/re.html#search-vs-match)。 – Aya

+0

在你的expresion中,字符串的開頭應該是ord。它不包括* CM *。你可能想要在你的正則表達式中加上'。*'。 –

+0

@MarekKowalski明顯會起作用,但隨後所有這些垃圾角色都會作爲比賽的一部分返回。根據他們計劃對比賽做什麼,這可能會使事情變得很髒/複雜 – acattle

回答

8

在Python中re.match()匹配字符串的開頭。 CMord01中的第一個字母是C,而不是O,因此它不匹配。

大多數語言的正則表達式模塊沒有此限制,因此它們匹配字符串沒有問題。要在Python中產生這種行爲,您需要使用re.search()。有關這兩種功能之間的區別的更多信息,請參閱"search() vs. match()"

+0

乾杯,問題解決了!不知道search()vs match(),現在我知道了。 – Guio

+0

@Guio這是Python的特質。我記得我不得不面對同樣的問題。 – acattle

相關問題