patterns = {}
patterns[1] = re.compile("[A-Z]\d-[A-Z]\d")
patterns[2] = re.compile("[A-Z]\d-[A-Z]\d\d")
patterns[3] = re.compile("[A-Z]\d\d-[A-Z]\d\d")
patterns[4] = re.compile("[A-Z]\d\d-[A-Z]\d\d\d")
patterns[5] = re.compile("[A-Z]\d\d\d-[A-Z]\d\d\d")
patterns[6] = re.compile("[A-Z][A-Z]\d-[A-Z][A-Z]\d")
patterns[7] = re.compile("[A-Z][A-Z]\d-[A-Z][A-Z]\d\d")
patterns[8] = re.compile("[A-Z][A-Z]\d\d-[A-Z][A-Z]\d\d")
patterns[9] = re.compile("[A-Z][A-Z]\d\d-[A-Z][A-Z]\d\d\d")
patterns[10] = re.compile("[A-Z][A-Z]\d\d\d-[A-Z][A-Z]\d\d\d")
def matchFound(toSearch):
for items in sorted(patterns.keys(), reverse=True):
matchObject = patterns[items].search(toSearch)
if matchObject:
return items
return 0
然後我用下面的代碼來尋找匹配:可能簡化這些Python正則表達式?
while matchFound(toSearch) > 0:
我有10個不同的正則表達式,但我覺得他們可以通過一個被替換,寫得好,更優雅的正則表達式。你們認爲這有可能嗎?
編輯:忘了兩個表達式:
patterns[11] = re.compile("[A-Z]\d-[A-Z]\d\d\d")
patterns[12] = re.compile("[A-Z][A-Z]\d-[A-Z][A-Z]\d\d\d")
EDIT2:我結束了以下內容。我意識到我可以得到額外的結果,但我不認爲他們在我分析的數據中是可能的。
patterns = {}
patterns[1] = re.compile("[A-Z]{1,2}\d-[A-Z]{1,2}\d{1,3}")
patterns[2] = re.compile("[A-Z]{1,2}\d\d-[A-Z]{1,2}\d{2,3}")
patterns[3] = re.compile("[A-Z]{1,2}\d\d\d-[A-Z]{1,2}\d\d\d")
除了。join('|')我假設:P – Andrew
如果你想說「找到與其中任何一個相匹配的東西」,多個正則表達式可以總是被單個正則表達式替換。你的直覺在這裏很好地服務你。證明:使用'|'連接定義正則表達式的字符串字符,你已經構建它。這就是說,在這種情況下,肖恩爲你製作了一個,這進一步簡化了我剛剛解釋的內容。 – Crisfole
實際上並沒有回答你的問題(我相信肖恩已經做過了),我想推薦我使用的小抄。我個人使用正則表達式很少見,這就是爲什麼我總是諮詢這張表格 - http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/ - 我覺得它非常有用。只是打印出來,在你的桌子周圍:) – Timur