python中r'string'和普通'string'之间的区别是什么?

时间:2014-03-15 20:42:28

标签: python regex string

python中r string(r'foobar')和普通字符串('foobar')之间的区别是什么?是r'字符串'一个正则表达式字符串?

我已尝试过以下操作,但对我的正则表达式匹配没有任何影响:

>>> import re
>>> n = 3
>>> rgx = '(?=('+'\S'*n+'))'
>>> x = 'foobar'
>>> re.findall(rgx,x)
['foo', 'oob', 'oba', 'bar']
>>>
>>> rgx2 = r'(?=('+'\S'*n+'))'
>>> re.findall(rgx2,x)
['foo', 'oob', 'oba', 'bar']
>>>
>>> rgx3 = r'(?=(\S\S\S))'
>>> re.findall(rgx3,x)
['foo', 'oob', 'oba', 'bar']

2 个答案:

答案 0 :(得分:8)

r不表示“正则表达式字符串”;它的意思是“原始字符串”。根据{{​​3}}:

  

字符串文字可以选择以字母'r''R'为前缀;这些字符串称为原始字符串,并使用不同的规则来解释反斜杠转义序列。

答案 1 :(得分:3)

如果你有反斜杠转义,差异会很明显:​​

>>> s="foobar"
>>> import re
>>> re.sub('(o)\1', '', s)     # Using the backreference has no effect here as it's interpreted as a literal escaped 1
'foobar'
>>> re.sub(r'(o)\1', '', s)    # Using the backreference works!
'fbar'
>>> re.sub('(o)\\1', '', s)    # You need to escape the backslash here
'fbar'

引自String literal

  

一些语言提供了一种指定文字的方法   处理时没有任何特定语言的解释。这避免了   需要逃避,并产生更清晰的字符串。

您可能还想引用Lexical Analysis