清理Python正则表达式

Key*_*upt 16 python regex list

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

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

Aym*_*ieh 28

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

  • 模式中的空格被忽略,除非在字符类中或前面有未转义的反斜杠.
  • 当线既不包含在字符类或由反斜杠之后以"#",从通过线路的端部的最左边的例如"#"中的所有字符都被忽略.

以下两个陈述是等效的:

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

b = re.compile(r"\d+\.\d*")
Run Code Online (Sandbox Code Playgroud)

(取自详细模式的文档)

  • 可能值得指出的是,"re.X"表示详细模式,相当于写"re.VERBOSE". (4认同)

Ale*_*lli 13

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

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

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