我查看了一些舊的Java代碼,其中我從一些字符串中提取了日期和它們的格式。這是一個可怕的混亂,如果條件和正則表達式模式和匹配。 所以我想了解如何在Python和Python中解決這個問題。我有一些映射到日期格式的正則表達式模式,從中創建一個時間戳。聽說「如果在Java中的switch語句,在Python應該有一個dictonary」:使用註釋將RegEx映射到附加「指令」
pattern_dic = {
"[\\d]{2}:[\\d]{2}, .{3} [\\d]{1,2}, [\\d]{4} \\(UTC\\)": "HH:mm, MMM dd, yyyy (zzz)",
"[\d]{2}:[\d]{2}, [\d]{1,2} .{3} [\d]{4} \(UTC\)" : "HH:mm, dd MMM yyyy (zzz)",
...
}
*我認爲,我必須要改變這些日期模式,因爲我剛剛從Java解決方案複製它們。
在另一個我有正則表達式/替換對的問題中,我找到了一個很好的解決方案,使用這個字典,就像這個 (禮貌地向Stack Overflow上的一些聰明人)。這隻有在匹配正則表達式是一個簡單字符串時纔有效,所以它可以在字典中查找(我認爲)。
pattern_acc = re.compile(r'\b(' + '|'.join(pattern_dic.keys()) + r')\b')
comment = pattern_acc.sub(lambda x: pattern_dic[x.group()], comment)
這是我到目前爲止所提出的。我的問題是,我不知道我能得到的正則表達式匹配的部分來查找在我的字典(「matching_date_pattern」):
def multi_match(input_string, pattern_dic):
date_pattern = re.compile(r'\b(' + '|'.join(pattern_dic.keys()) + r')\b')
matches = date_pattern.findall(input_string)
date_formats = []
for match in matches:
matching_string = match.group()
date_format = pattern_dic["matching_date_pattern"]
date_formats.append((matching_string, date_format))
編輯: 我應該說,我會就像解決這個問題一樣。我想分開匹配和搜索。雖然能夠訪問匹配模式。 例如,如果正則表達式由許多組組成,並且它們匹配的「指令」會變得更加複雜。想象一下,例如,你期望很多不同的文本對象,比如鏈接,降價元素等等。我現在的問題歸結爲匹配和搜索之間匹配的模式。
也許這個問題也是編譯模式的代價,因爲單獨編譯它們當然會更容易訪問它們。
只要遍歷模式並在找到匹配項後獲取所需值,我就會更容易。 –