我想知道何时使用Python的正则表达式的原始字符串表示法:单引号,双引号或三重双引号?
来自https://docs.python.org/2/howto/regex.html
当与三引号字符串一起使用时,这使RE的格式更加整齐:
pat = re.compile(r""" \s* # Skip leading whitespace (?P<header>[^:]+) # Header name \s* : # Whitespace, and a colon (?P<value>.*?) # The header's value -- *? used to # lose the following trailing whitespace \s*$ # Trailing whitespace to end-of-line """, re.VERBOSE)
我用双引号和单引号替换了三重双引号,但都不起作用。
然而,该文章还使用单引号和其他示例中的双引号:
r"\w+\s+\1"
r'(\b\w+)\s+\1'
我想知道为什么?
谢谢!
答案 0 :(得分:5)
原始字符串的好处
使用原始字符串,您不必担心字符串中的反斜杠,如:
r"\d"
如果没有r
,字符串将无法以您期望的状态到达引擎。你必须逃避反斜杠。
三重引号的好处
使用三引号(正如其他人所说)是你的字符串可以跨越多行,如:
r"""(?x) # let's write this complex regex in free-space mode!
\d # match a digit
$ # at the end of a line
"""
答案 1 :(得分:1)
三重引用示例演示了详细模式,其中从正则表达式中删除了空格,您可以使用空白来提高可读性。奇怪的是,这个例子没有提到关于详细的另一部分:它忽略了作为注释的#到行尾的所有内容。由于三引号保留了换行符,因此正则表达式会看到多行在其末尾有注释。
>>> print (r"""
... \s* # Skip leading whitespace
... (?P<header>[^:]+) # Header name
... \s* : # Whitespace, and a colon
... ...
... """)
\s* # Skip leading whitespace
(?P<header>[^:]+) # Header name
\s* : # Whitespace, and a colon
...
>>>
如果您只是使用一堆单引号来连接字符串,它只会看到一行有很长的注释。
>>> print (
... r" \s* # Skip leading whitespace"
... r" (?P<header>[^:]+) # Header name"
... r" \s* : # Whitespace, and a colon"
... r"...")
\s* # Skip leading whitespace (?P<header>[^:]+) # Header name \s* : # Whitespace, and a colon...
>>>
您可以在每个字符串的末尾添加\ n以返回多行字符串。
至于单引号双引号,它只是个人偏好,对python或正则表达式无关紧要。如果引用的字符串包含“,那么”便于引用,反之亦然,就是这样。