2

我需要搜索可能有很多元字符的模式。目前我使用长正则表达式。

prodObjMatcher=re.compile(r"""^(?P<nodeName>[\w\/\:\[\]\<\>\@\$]+)""", re.S|re.M|re.I|re.X)

(我的实际模式很长,所以我只是粘贴了一些我需要帮助的相关部分)

当我需要在一次重新编译中编写这些模式的组合时,这尤其痛苦。

有没有缩短模式长度的pythonic方法?

4

1 回答 1

5

看,你的模式可以简化为

r"""^(?P<nodeName>[]\w/:[<>@$]+).*?"""

请注意,您不必转义字符类中的任何非单词字符,除了速记类、^-]\。有一些方法可以在字符类中保持那些(除了\)未转义:

  • ]在角色类的开始
  • -在字符类的开始/结束处
  • ^- 仅当您将其作为文字符号放置在字符类的开头时才应进行转义。

在字符类之外,您必须转义\, [, (, ), +, $, ^, *, ?, ..

请注意,这/不是 Python 正则表达式模式中的特殊正则表达式元字符,并且不必转义。

在定义正则表达式模式时使用原始字符串文字以避免出现问题(例如混淆单词边界r'\b'和退格'\b')。

于 2016-08-11T13:25:15.373 回答