我想知道什么时候使用Python的正则表达式的原始字符串表示法:单引号、双引号还是三重双引号?
来自https://docs.python.org/2/howto/regex.html
当与三引号字符串一起使用时,可以更整洁地格式化REs: pat =re.compile(r“”\s* # Skip前导空格(?P^:+) #报头名称\s*:#空格,和冒号(?P *?)#标题的值-*?用于#丢失以下尾随空格\s*$ #尾部空格到行尾“,re.VERBOSE)
我用双引号代替了三重双引号,用单引号代替了三重双引号,但两者都不管用。
然而,本文还在其他示例中使用单引号和双引号:
r"\w+\s+\1"
r'(\b\w+)\s+\1'我想知道为什么?
谢谢!
发布于 2014-06-08 20:00:47
原始字符串的好处
对于原始字符串,不必担心字符串中的反斜杠,如下所示:
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
"""发布于 2014-06-08 20:50:40
三元引号示例演示了详细模式,其中空格从regex中剥离,您可以使用空白来提高可读性。奇怪的是,这个例子没有提到关于冗长的另一部分:它忽略了#到行尾的所有内容作为注释。由于三元引号保留了换行符,regex会看到多行在行尾有注释。
>>> 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或regex来说并不重要。如果引用的字符串包含",那么“引用就方便了,反之亦然。
https://stackoverflow.com/questions/24110104
复制相似问题