我查看了一些旧的Java代码,其中我从许多字符串中提取日期和格式。如果条件和正则表达式模式和匹配器,这是一个可怕的混乱。 所以我想到了如何在Python中解决这个问题。我有一些映射到日期格式的正则表达式模式,从中创建时间戳。我听说"如果在Java中有一个switch语句,那么在Python中应该有一个dictonary":
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))
修改 我应该说我想解决这个问题作为初步问题。我想分开匹配和搜索。虽然能够访问匹配模式。 例如,如果正则表达式包含许多组和"指令"它们匹配变得更加复杂。想象一下,例如,您期望很多不同的文本对象,如链接,降价元素等。我现在的问题归结为知道匹配和搜索之间匹配的模式。
也许问题是编译模式的成本也是多少,因为当然单独编译它们会使访问它们变得更容易。
答案 0 :(得分:0)
您从Stack Overflow中抢夺的代码很好,您希望匹配多个正则表达式的任何,但无法解决您找到哪个的问题regexps在每种特定情况下都匹配。您应该只是迭代pattern_dic
并依次检查每个键:
def multi_match(input_string, pattern_dic):
for regexp in pattern_dic:
re.search(regexp, input_string)
matching_string = match.group()
date_format = pattern_dic[regexp]
date_formats.append((matching_string, date_format))
return date_formats
旁注:.append
接受一个参数,因此有必要形成一个元组 - 因此需要另外一对括号。