使用字典将正则表达式映射到其他"instruction"



我看了一些我的旧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采用一个参数,因此有必要形成一个元组 - 因此其他括号。

相关内容

  • 没有找到相关文章

最新更新