python中的r string(r'foobar'
)和普通string('foobar'
)有什么区别?r'string'是正则表达式字符串吗?
我已经尝试了以下方法,对我的正则表达式匹配没有任何影响:
>>> 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条答案
按热度按时间pgpifvop1#
r
不表示“正则表达式字符串”;它的意思是“原始字符串”。根据文档:字符串文字可以有选择地以字母
'r'
或'R'
作为前缀;这样的字符串被称为“原始字符串”,并且使用不同的规则来解释反斜杠转义序列。它们通常 * 用于 * 正则表达式(和recommended),因为正则表达式和非原始字符串 * 都 * 使用反斜杠作为转义字符。例如,将普通字符串中的正则表达式与文字反斜杠匹配将是
'\\\\'
;用一个原始字符串,它就是'\\'
。ntjbwcob2#
在使用反斜杠转义符的情况下,这种差异会变得明显:
引用自String literal:
有几种语言提供了一种方法来指定一个文字在没有任何特定语言解释的情况下被处理。这避免了转义的需要,并产生了更清晰的字符串。
你也可以参考词法分析。