首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用二叉树将RegEx映射到附加的“指令”

使用二叉树将RegEx映射到附加的“指令”
EN

Stack Overflow用户
提问于 2017-06-26 11:25:44
回答 1查看 53关注 0票数 1

我查看了我的一些旧Java代码,在这些代码中,我从许多字符串中提取日期及其格式。这是一个可怕的混乱,如果条件和正则表达式模式和匹配。所以我想到了如何用Python来解决这个问题。我有许多regex模式,它们映射到日期格式,然后相应地创建一个时间戳。我听说“如果Java中有一个开关语句,在Python中应该有一个二叉树”:

代码语言:javascript
运行
复制
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是一个简单的字符串时,它才能工作,因此它可以在字典中查找(我认为)。

代码语言:javascript
运行
复制
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”)中查找:

代码语言:javascript
运行
复制
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))

编辑:--我应该说我想把这作为一个初步问题来解决。我想把匹配和搜索分开。同时能够访问匹配的模式。例如,如果正则表达式由许多组组成,并且“指令”与它们相匹配,就会变得更加复杂。例如,假设您期望有许多不同的文本对象,如链接、标记元素等等。我现在的问题归结为知道哪种模式匹配,在匹配和搜索之间。

也许问题还在于编译模式的代价有多大,因为单独编译它们当然会使访问它们变得更容易。

EN

回答 1

Stack Overflow用户

发布于 2017-06-26 11:37:11

从堆栈溢出中获取的这段代码很好,您希望匹配任何多个regexp的,但并不能解决在每个特定情况下找到正则表达式的匹配的问题。您应该只在pattern_dic上迭代并依次检查每个键:

代码语言:javascript
运行
复制
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只使用一个参数,因此有必要形成一个元组--从而增加一对括号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44758641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档