我看了一些我的旧Java代码,其中我从许多字符串中提取了日期及其格式。如果条件和正则表达式和匹配者,这是一个可怕的混乱。因此,我想到了当今和在Python中如何解决。我有许多正则绘制到日期格式的正则格式,从中创建了一个时间戳。我听到"如果在爪哇有一个开关语句,则在python中应该有一个命令":
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解决方案复制它们。
在我有正则/替换对的另一个问题中,我使用这样的词典找到了一个很好的解决方案(由堆栈溢出的一些出色的人提供(。只有在匹配的正则符号是一个简单的字符串时才有效,因此它可以在字典中查找(我认为(。
。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))
编辑:我应该说,我想将其作为初步问题。我想将匹配和搜索分开。同时能够访问匹配模式。例如,如果正则表达式由许多组组成,并且"说明"匹配以变得更加复杂。想象一下,例如,您期望许多不同的文本对象,例如链接,宣传元素等。目前,我的问题归结为知道匹配和搜索之间的模式匹配。
也许问题也是编译模式的昂贵,因为分别编译它们当然可以更容易访问它们。
您从堆栈溢出中捕获的这个代码很好,您想匹配多个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
采用一个参数,因此有必要形成一个元组 - 因此其他括号。