Python的:如何使用长正则表达式进行行line continuation

Python: How do I do line continuation with a long regex?

本问题已经有最佳答案,请猛点这里访问。

我有一个很长的regex,我想继续下一行,但我所做的一切都给了我一个eol或打破regex。我已经在括号中继续了这行一次,并且已经阅读了这篇文章,除了其他内容之外,我如何在Python中执行换行(换行)操作?

工作,但时间仍然太长:

1
2
REGEX = re.compile(
            r'\d\s+\d+\s+([A-Z0-9-]+)\s+([0-9]+.\d\(\d\)[A-Z0-9]+)\s+([a-zA-Z\d-]+)')

错误:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
REGEX = re.compile(
            r'\d\s+\d+\s+([A-Z0-9-]+)\s+([0-9]+.\d\(\d\)[A-Z0-9]+
            )\s+([a-zA-Z\d-]+)'
)

SyntaxError: EOL while scanning string literal


REGEX = re.compile(
            r'\d\s+\d+\s+([A-Z0-9-]+)\s+([0-9]+.\d\(\d\
                )[A-Z0-9]+)\s+([a-zA-Z\d-]+)'
)

sre_constants.error: unbalanced parenthesis


REGEX = re.compile(
            r'\d\s+\d+\s+([A-Z0-9-]+)\s+( \
            [0-9]+.\d\(\d\)[A-Z0-9]+)\s+([a-zA-Z\d-]+)'
)

regex no longer works


REGEX = (re.compile(
            r'\d\s+\d+\s+([A-Z0-9-]+)\s+(
            [0-9]+.\d\(\d\)[A-Z0-9]+)\s+([a-zA-Z\d-]+)'
))

SyntaxError: EOL while scanning string literal

我已经能够缩短我的regex,这样这就不再是一个问题了,但我现在有兴趣知道如何用一个长的regex进行行继续?


如果使用re.VERBOSE标志,可以尽可能多地拆分正则表达式,使其更易于阅读:

1
2
3
4
5
6
7
8
pattern = r"""
    \d\s+
    \d+\s+
    ([A-Z0-9-]+)\s+
    ([0-9]+.\d\(\d\)[A-Z0-9]+)\s+
    ([a-zA-Z\d-]+)"""


REGEX = re.compile(pattern, re.VERBOSE)

这种方法在优秀的"深入到Python"一书中进行了解释。请参见"详细正则表达式"。


可以在多行中使用多个字符串,在发送到re.compile之前,python会将它们连接起来(只要多个字符串位于()之间)。示例-

1
2
REGEX = re.compile(r"\d\s+\d+\s+([A-Z0-9-]+)\s+([0-9]+.\d\(\d\)"
                   r"[A-Z0-9]+)\s+([a-zA-Z\d-]+)")


尝试:

1
2
3
4
regex = re.compile(
    r'\d\s+\d+\s+([A-Z0-9-]+)\s+('
    r'[0-9]+.\d\(\d\)[A-Z0-9]+)\s+([a-zA-Z\d-]+)'
)