hel*_*ire 2 python regex string
我想知道使用字符串前缀"R"的时候还是不找使用python正则表达式句号(句号)时,我得到了相同的结果的原因.
阅读数源(下面的链接)的倍数次,用代码尝试找到相同的结果(同样见下文)后,我仍然不确定的:
re.compile("\.").sub("!", "blah.")
Run Code Online (Sandbox Code Playgroud)
"胡说!"
re.compile(r"\.").sub("!", "blah.")
Run Code Online (Sandbox Code Playgroud)
"胡说!"
re.compile(r"\.").search("blah.").group()
Run Code Online (Sandbox Code Playgroud)
''
re.compile("\.").search("blah.").group()
Run Code Online (Sandbox Code Playgroud)
''
我看过的资料来源:
Python文档:字符串文字 http://docs.python.org/2/reference/lexical_analysis.html#string-literals
r前缀用于原始字符串 http://forums.udacity.com/questions/7000217/r-prefix-is-for-raw-strings
原始字符串表示法就是指定字符串值的表示法.当使用正常字符串表示法识别的反斜杠转义时,符号会产生不同的字符串值.因为正则表达式还附加了反斜杠字符的含义,所以原始字符串表示法非常方便,因为它避免了必须使用过多的转义.
引用Python Regular Expression HOWTO:
解决方案是使用Python的原始字符串表示法来表示正则表达式; 反斜杠不以任何特殊方式处理前缀的字符串文字
'r',因此r"\n"是一个包含'\'和的双字符字符串'n',"\n"而是包含换行符的单字符字符串.正则表达式通常使用这种原始字符串表示法用Python代码编写.
该\.组合在常规python字符串中没有特殊含义,因此在'\.'和的结果之间没有任何区别r'\.'; 你可以使用:
>>> len('\.')
2
>>> len(r'\.')
2
Run Code Online (Sandbox Code Playgroud)
当反斜杠+其他字符在常规字符串表示法中具有特殊含义时,原始字符串只会产生差异:
>>> '\b'
'\x08'
>>> r'\b'
'\\b'
>>> len('\b')
1
>>> len(r'\b')
2
Run Code Online (Sandbox Code Playgroud)
这种\b组合具有特殊意义; 在常规字符串中,它被解释为退格符.但是正则表达式\b看作是一个单词边界锚,因此\\b每次要在正则表达式中使用它时,都必须在Python字符串中使用它.r'\b'相反,使用它可以更容易地读取和编写表达式.
正则表达式函数传递字符串值 ; Python解释你的字符串文字的结果.函数不知道您是使用原始或普通的字符串文字语法.
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |