我有這樣的正則表達式匹配的這兩種可能性之一:正則表達式或語句不匹配
(\b(Q|L[A-Z])\d{8}\b)
# Possibilities
LK10652174
Q10652174
現在這樣做的結果是:
>>> regex.findall(string)
[(u'LK10652175', u'LK')]
我不希望它選擇額外LK
匹配,是否有方法來包裝OR
聲明而不會得到這個額外的選擇?
我有這樣的正則表達式匹配的這兩種可能性之一:正則表達式或語句不匹配
(\b(Q|L[A-Z])\d{8}\b)
# Possibilities
LK10652174
Q10652174
現在這樣做的結果是:
>>> regex.findall(string)
[(u'LK10652175', u'LK')]
我不希望它選擇額外LK
匹配,是否有方法來包裝OR
聲明而不會得到這個額外的選擇?
是,使用非捕獲括號(拖放最外面的括號,你不需要他們):
\b(?:Q|L[A-Z])\d{8}\b
感謝您的快速反應,以及不錯的提示:) – Hassek 2012-08-14 21:41:47
從python文檔:
當一個圖案完全相匹配,該分支被接受。這個 意味着一旦A匹配,B將不會被進一步測試,即使它會產生更長的整體匹配。換句話說,'|'運營商 從不貪心。
這意味着你需要把它寫這樣以確保比賽是你打算整串:
import re
a = re.compile("(Q\\d{8}|L[A-Z]\\d{8})")
print a.findall("LK10652174 Q10652174")
['LK10652174', 'Q10652174']
這裏是個不錯的好地方測試:HTTP://www.pythonregex。 com/ – Hassek 2012-08-14 21:35:50