什么是;r";在pythons中,重新编译(r';模式标志';)意味着什么?

什么是;r";在pythons中,重新编译(r';模式标志';)意味着什么?,python,regex,Python,Regex,我正在通读。根据这一点,pythons re.compile(r“模式标志”)中的“r”表示原始字符串符号: 解决方案是将Python的原始字符串表示法用于正则表达式 表达模式;反斜杠不会以任何特殊方式处理 前缀为“r”的字符串文字。所以r“\n”是一个两个字符的字符串 包含“\”和“n”,而“\n”是一个单字符字符串 包含换行符的。通常模式将用Python表示 使用此原始字符串表示法的代码 那么,公平地说: re.compile(rpattern)表示“pattern”是正则表达式,而re.c

我正在通读。根据这一点,pythons re.compile(r“模式标志”)中的“r”表示原始字符串符号:

解决方案是将Python的原始字符串表示法用于正则表达式 表达模式;反斜杠不会以任何特殊方式处理 前缀为“r”的字符串文字。所以r“\n”是一个两个字符的字符串 包含“\”和“n”,而“\n”是一个单字符字符串 包含换行符的。通常模式将用Python表示 使用此原始字符串表示法的代码

那么,公平地说:


re.compile(rpattern)表示“pattern”是正则表达式,而re.compile(pattern)表示“pattern”是完全匹配的

正如
@PauloBu
所述,
r
字符串前缀与正则表达式没有特别的关系,但通常与Python中的字符串有关

普通字符串使用反斜杠字符作为特殊字符(如换行符)的转义字符:

r
前缀告诉口译员不要这样做:

>>> print(r'this is \n a test')
this is \n a test
>>> 
这在正则表达式中很重要,因为您需要反斜杠使其完整地返回到
re
模块,尤其是
\b
在单词的开头和结尾专门匹配空字符串
re
需要字符串
\b
,但是正常的字符串解释
'\b'
被转换为ASCII退格字符,因此您需要显式转义反斜杠(
'\\b'
),或者告诉python它是原始字符串(
r'\b'


否,因为粘贴的文档解释了字符串的
r
前缀表示该字符串是一个

由于字符的Python转义和正则表达式转义之间存在冲突,这两种转义都使用反斜杠
\
字符,因此原始字符串提供了一种向Python指示需要未转义字符串的方法

检查以下各项:

>>> "\n"
'\n'
>>> r"\n"
'\\n'
>>> print "\n"


>>> print r"\n"
\n
r
作为前缀仅向字符串指示反斜杠
\
应按字面意思处理,而不是作为python的转义字符。

例如,当您在单词边界上搜索时,这很有用。这个正则表达式是
\b
,但是要在Python字符串中捕获它,我需要使用
“\\b”
作为模式。相反,我可以使用原始字符串:
r“\b”
进行模式匹配

当试图在正则表达式中找到一个文本反斜杠时,这变得特别方便。为了匹配正则表达式中的反斜杠,我需要使用模式
\\\
,在python中转义这意味着我需要转义每个斜杠,模式变成
“\\\\”
,或者更简单的
r“\\\”


正如您在更长更复杂的正则表达式中所猜测的那样,额外的斜杠可能会让人困惑,因此通常认为原始字符串是正确的选择。

不。正则表达式语法中的所有内容都不需要前面加
\
,因此
*
+
,等等在模式中仍然具有特殊的意义


r'
经常被用来方便需要大量
\
的正则表达式,因为它可以防止将
\

r
regex
没有任何关系。它只是简化了模式的字符串声明。下面已经给出了很好的答案,但只是想澄清一下:答案是否定的,我将把它解释为
re.compile
,没有
r
表示完全匹配?谢谢-非常有帮助的更好的答案,因为它实际上解释了r代表什么;)<代码>\b是退格<代码>\a是贝尔。@user2357112谢谢,我总是把它混在一起-我会修正这个帖子,就像你用一个例子来说明你的观点一样。
>>> import re
>>> re.findall('\b', 'test') # the backslash gets consumed by the python string interpreter
[]
>>> re.findall('\\b', 'test') # backslash is explicitly escaped and is passed through to re module
['', '']
>>> re.findall(r'\b', 'test') # often this syntax is easier
['', '']
>>> "\n"
'\n'
>>> r"\n"
'\\n'
>>> print "\n"


>>> print r"\n"
\n