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']
答案 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'
一些语言提供了一种指定文字的方法 处理时没有任何特定语言的解释。这避免了 需要逃避,并产生更清晰的字符串。
您可能还想引用Lexical Analysis。