结合多个详细的python正则表达式

Posted

技术标签:

【中文标题】结合多个详细的python正则表达式【英文标题】:Combine multiple verbose python regex 【发布时间】:2019-01-18 03:00:47 【问题描述】:

我希望通过组合较小的可重用模式来创建一些 python 正则表达式,并且我希望可重用模式使用详细标志。例如,假设我有一个简单的数字模式和一个小写字符模式,

DIGIT_PATTERN = re.compile(r"""
    (?P<my_digit_pattern>        # start named group
      \d+                        # 1 or more integers
    )                            # close named group
    """, re.VERBOSE)
CHAR_PATTERN = re.compile(r"""
    (?P<my_char_pattern>         # start named group
      [a-z]                      # a character
    )                            # close named group
    """, re.VERBOSE)

有没有一种方法可以创建由上述模式组成的新模式?有点像,

NEW_PATTERN = CHAR_PATTERN followed by DIGIT PATTERN followed by CHAR_PATTERN

我想匹配字符串a937267t。上面的例子被高度简化了,但重点是如何结合使用详细标志定义的正则表达式。

更新

这是我目前所拥有的……可能是唯一的方法……

NEW_PATTERN = re.compile(
    CHAR_PATTERN.pattern + 
    DIGIT_PATTERN.pattern + 
    CHAR_PATTERN.pattern,
    re.VERBOSE
)

我不得不放弃命名组 b/c 不能有两个组命名相同,但我认为这就是我想要的。

【问题讨论】:

请记住,正则表达式语言允许您编写正则表达式来超越您实际匹配的内容,或者允许重复跳过匹配的部分。确实没有直接的方法可以将它们“添加”到彼此,您的解决方案也不适合它们。您对此的实际用例是什么? 在re模块类Pattern中可能需要__add__...,不过没必要,不如在re.compile中一次性完成。 o(╯□╰)o 我有大约十几个不同的“NEW_PATTERN”对象来定义 [NP0, ..., NP11]。 NP 对象的某些组成部分是相同的,如果我确定 CHAR_PATTERN 错误或需要更新,我不想在多个地方更改代码。 【参考方案1】:
NEW_PATTERN = re.compile(r"""
    (?P<my_new_pattern>         # start named group
      [a-z]                      # a character
      \d+                        # 1 or more integers
      [a-z]                      # a character
    )                            # close named group
    """, re.VERBOSE)

【讨论】:

我举了一个高度简化的例子。我意识到我可以内联它们,但这就是我试图避免的。想象一下 DIGIT_PATTERN 和 CHAR_PATTERN 各有 40 行长,而且有几十行。 老实说理解起来有点困难,但听起来你想在代码中构建正则表达式而不是输入它:my_regex = '[a-z]\d+' * 40 然后NEW_PATTERN = re.compile(my_regex, re.VERBOSE) 是的,我可以更好地解释它,我现在有一个工作示例......可能是可以做到的最好的。我将通过底部的编辑来更新主帖

以上是关于结合多个详细的python正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

超详细Python正则表达式操作指南(re使用),一

超详细Python正则表达式操作指南(re使用),一

如何将 Python 和 Notepad++ 中的连字符单词与带有异常模式的正则表达式结合起来?

python中re库 正则表达式的处理与应用(详细版!!!)

如何使用 Python 结合正则表达式和字符串/文件操作在文本文件中搜索模式并存储模式的实例?

python基础——正则表达式