结合多个详细的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 和 Notepad++ 中的连字符单词与带有异常模式的正则表达式结合起来?
python中re库 正则表达式的处理与应用(详细版!!!)