Python 关于带和不带原始文本的搜索模块中的正则表达式

Python 关于带和不带原始文本的搜索模块中的正则表达式,python,regex,text,Python,Regex,Text,我正在用python2.7 >>> a='hello team 123' >>> b=re.search('hello team [0-9]+',a) >>> >>> b <_sre.SRE_Match object at 0x00000000022995E0> >>> b=re.search(r'hello team [0-9]+',a) >>> b <_sre.SRE

我正在用python
2.7

>>> a='hello team 123'
>>> b=re.search('hello team [0-9]+',a)
>>>
>>> b
<_sre.SRE_Match object at 0x00000000022995E0>
>>> b=re.search(r'hello team [0-9]+',a)
>>> b
<_sre.SRE_Match object at 0x0000000002299578>
>>>
>a='hello team 123'
>>>b=重新搜索(“你好团队[0-9]+”,a)
>>>
>>>b
>>>b=重新搜索(r'hello team[0-9]+',a)
>>>b
>>>
正如你所看到的,在一种情况下,我在做原始文本,而在另一种情况下,它没有原始文本

从其中一篇文章中,我了解到:
r
表示该字符串将被视为原始字符串,这意味着将忽略所有转义码

例如:

“\n”将被视为换行符,而r“\n”将被视为后跟n的字符

那么,为什么我的示例适用于两种情况,即使用
r
和不使用
r
? 是不是因为我的示例都没有使用
\

另外,请看附带的屏幕截图
您没有在字符串中使用任何特殊字符,因此
r'
'
将执行相同的操作

hello团队[0-9]+
中,无需转义任何内容。它将按原样传递给正则表达式引擎。如果在Python字符串中使用特殊字符,则需要对其进行转义以将其传递给正则表达式引擎

正则表达式涉及两个级别的逃逸。第一级是Python字符串,第二级是正则表达式引擎

例如:

'\\\'
-->Python(字符串翻译)-->
'\\'
-->Regex引擎(翻译)-->
'\'

为了避免Python字符串转换,您使用原始字符串

r'\\'
-->Python(字符串翻译)-->'\\'-->正则表达式引擎(翻译)-->
'\'



当我做r'\\'时,我得到'\\\',但当我做'\\'时,我得到'\\'。正如你所说,这种行为是预期的吗?请解释一下,当你做
r'\\\'
时,我不明白你是如何得到
'\\\'
的。详细说明。如果你愿意的话,可以开始一个新问题。请原谅我的无知。我已经编辑了我的问题。请看一看并回答confirm@fsociety当您不使用
print
语句
repr()
时,将在内部调用方法,当您使用print语句
str()
时,将调用方法。
>>> print repr('\\')
'\\'
>>> print repr(r'\\')
'\\\\'
>>> print str('\\')
\
>>> print str(r'\\')
\\