我查看了我的一些旧Java代码,在这些代码中,我从许多字符串中提取日期及其格式。这是一个可怕的混乱,如果条件和正则表达式模式和匹配。所以我想到了如何用Python来解决这个问题。我有许多regex模式,它们映射到日期格式,然后相应地创建一个时间戳。我听说“如果Java中有一个开关语句,在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解决方案中复制它们。
在另一个我有regex /替换对的问题中,我找到了一个非常好的解决方案,使用这样的字典(对堆栈溢出上的某个聪明的人表示感谢)。只有当匹配的regex是一个简单的字符串时,它才能工作,因此它可以在字典中查找(我认为)。
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))
编辑:--我应该说我想把这作为一个初步问题来解决。我想把匹配和搜索分开。同时能够访问匹配的模式。例如,如果正则表达式由许多组组成,并且“指令”与它们相匹配,就会变得更加复杂。例如,假设您期望有许多不同的文本对象,如链接、标记元素等等。我现在的问题归结为知道哪种模式匹配,在匹配和搜索之间。
也许问题还在于编译模式的代价有多大,因为单独编译它们当然会使访问它们变得更容易。
发布于 2017-06-26 11:37:11
从堆栈溢出中获取的这段代码很好,您希望匹配任何多个regexp的,但并不能解决在每个特定情况下找到正则表达式的匹配的问题。您应该只在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
只使用一个参数,因此有必要形成一个元组--从而增加一对括号。
https://stackoverflow.com/questions/44758641
复制相似问题