清理Python正则表达式

时间:2009-06-06 02:21:58

标签: python regex list

有没有更简洁的方法在python中编写长正则表达式模式?我在某处看到了这种方法,但python中的正则表达式不允许列表。

patterns = [
    re.compile(r'<!--([^->]|(-+[^->])|(-?>))*-{2,}>'),
    re.compile(r'\n+|\s{2}')
]

3 个答案:

答案 0 :(得分:26)

您可以使用详细模式编写更易读的正则表达式。在这种模式下:

  • 模式中的空格被忽略,除非在字符类中或前面有未转义的反斜杠。
  • 如果某行在字符类中或在未转义的反斜杠前面都包含“#”,则会忽略从最左边这样的“#”到该行末尾的所有字符。

以下两个陈述是等效的:

a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)

b = re.compile(r"\d+\.\d*")

(取自verbose mode的文件)

答案 1 :(得分:13)

虽然@Ayman关于re.VERBOSE的建议是一个更好的主意,如果你想要的只是你所展示的,那就去做:

patterns = re.compile(
        r'<!--([^->]|(-+[^->])|(-?>))*-{2,}>'
        r'\n+|\s{2}'
)

和Python的相邻字符串文字的自动连接(很像C,btw)将完成剩下的工作; - )。

答案 2 :(得分:2)

你可以在正则表达式中使用注释,这使得它们更具可读性。以http://gnosis.cx/publish/programming/regular_expressions.html

为例
/               # identify URLs within a text file
          [^="] # do not match URLs in IMG tags like:
                # <img src="http://mysite.com/mypic.png">
http|ftp|gopher # make sure we find a resource type
          :\/\/ # ...needs to be followed by colon-slash-slash
      [^ \n\r]+ # stuff other than space, newline, tab is in URL
    (?=[\s\.,]) # assert: followed by whitespace/period/comma 
/