3

为了清楚起见,我想将正则表达式拆分为多行,但我不确定使用原始字符串的最佳方法是什么。

SECT_EXP = (
    r'^(?P<number>.+?[.]? {1,2}'  # Begin number pattern match
    r'(?P<sect_num>'  # Begin section number match
    r'(?P<full_num>'  # Begin full number match
    r'(?P<title>\d{1,2}?)'  # Match title substring
    r'(?P<chapter>\d{2})'  # Match chapter substring
    r')'  # End full number match
    r'[.]'
    r'(?P<section>\d+)'  # Match section substring
    r')'  # End section number match
    r')'  # End number pattern match
    r'([.]?)[ ]*$'  # Lazy matching end of strings
)

但是我是否需要在每个字符串前面加上 r 以确保在使用隐式行连接时将整个内容作为原始字符串处理?

4

1 回答 1

4

这个页面:

re.X
re.VERBOSE

此标志允许您编写看起来更好的正则表达式。模式中的空白将被忽略,除非在字符类中或前面有未转义的反斜杠,并且当行包含“#”既不在字符类中也不在前面有未转义的反斜杠时,从最左边开始的所有字符,例如“# ' 到行尾被忽略。

这意味着以下两个匹配十进制数的正则表达式对象在功能上是相等的:

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

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

如您所见,可以使用带有 'r' 前缀的三引号字符串,如上所示。

于 2014-01-06T17:17:48.027 回答