Python原始字符串正则匹配特殊字符失败,是否使用方式有误?
为什么Python原始字符串匹配含特殊字符的模式失败?
你没搞错原始字符串的基础用法,但忽略了一个关键细节:原始字符串只是让Python解释器不解析字符串里的转义符,可正则表达式引擎本身还有一套自己的特殊字符规则!
咱们来拆解你的问题:
在正则语法里,+是一个量词,作用是匹配前面的字符1次或多次。你写的r"testing+101@gmail.com",正则引擎会把它解读成:testin加上1次或多次的g,然后跟着101@gmail.com——这显然和你要匹配的testing+101@gmail.com完全不是一回事,自然找不到匹配项,也就抛出了AttributeError。
那怎么用原始字符串正确匹配呢?其实很简单:在原始字符串里,依然需要对正则的特殊字符用\转义,只不过因为是原始字符串,\不会被Python解析掉,直接传给正则引擎就行。
正确的代码应该是这样:
import re pattern = re.compile(r"testing\+101@gmail\.com") # 注意\+和\.的转义 sentence = '___dsdtesting+101@gmail.comaaa___' result = re.search(pattern, sentence).group() print(result) # 输出:testing+101@gmail.com
这里额外提一句:@在正则里不是特殊字符,但.是(它能匹配任意单个字符),所以如果你想精确匹配邮箱里的.,也得转义成\.,不然万一字符串里是testing+101@gmailXcom也会被匹配到,这显然不是你想要的。
总结一下:
原始字符串的核心价值是帮你避免写双反斜杠(比如不用写成普通字符串的"testing\\+101@gmail\\.com"),但它不会取消正则表达式自身的特殊字符规则——该转义的正则特殊字符,还是得用\转义,只是原始字符串让这个转义过程更简洁而已。
内容的提问来源于stack exchange,提问作者shanik1986
相关产品推荐
相关产品推荐

