【发布时间】: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错误或需要更新,我不想在多个地方更改代码。