逃避Python中的所有元字符

时间:2016-08-11 12:56:40

标签: python regex metacharacters

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

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

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

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

是否有缩短图案长度的pythonic方法?

1 个答案:

答案 0 :(得分:5)

看,您的模式可以缩减为

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

请注意,除了简写类^-]和{{1}之外,您不必转义字符类中的任何非单词字符。 }。有一些方法可以保留字符类中未转义的那些(\除外):

  • \在角色类的开头
  • ]位于角色类的开头/结尾
  • - - 只有在将字符类作为文字符号放在字符类的开头时才应进行转义。

在角色类之外,您必须逃避^\[()+,{{1 }},$^*

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

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