Python正则表达式匹配含点号字符串失败的原因咨询
关于Python正则表达式
match()方法匹配含点号字符串的问题 嘿,你遇到的这个情况其实是re.match()方法的固有特性,不是你忽略了什么细节哦,咱们来拆解下:
核心原因:match()只从字符串开头匹配
re.match()方法的作用是从目标字符串的第一个字符开始检查是否匹配正则表达式,如果开头不匹配,直接返回None,不会继续往后查找。
看你的测试案例:
- 第一个场景中,目标字符串是
'txt',正则'txt'刚好从开头完全匹配,所以返回了匹配对象。 - 第二个场景中,目标字符串是
'.txt',开头第一个字符是.,而你的正则是'txt',开头就对不上,所以直接返回None了。
解决方法
根据你的需求,有两种常见的处理方式:
改用
re.search()方法search()会在整个字符串中查找第一个匹配的位置,不管是不是开头。示例代码:import re re.compile('txt').search('.txt') # 会返回匹配对象,因为找到了字符串里的'txt'部分调整正则表达式适配
match()
如果一定要用match(),可以修改正则让它兼容开头的点号:- 如果你想匹配任意开头+txt,可以用:
re.compile(r'.*txt').match('.txt') # 这里的`.*`表示匹配任意数量的任意字符(除换行),所以开头的`.`会被匹配到 - 如果确定目标字符串开头就是
.,可以直接把点号写进正则(注意转义,因为正则里.是通配符):re.compile(r'\.txt').match('.txt')
- 如果你想匹配任意开头+txt,可以用:
小提醒
别混淆正则里的.和目标字符串的.哦:正则中的.是匹配任意单个字符的通配符,但你这里的问题根源是match()的开头匹配规则,不是点号的正则匹配逻辑~
内容的提问来源于stack exchange,提问作者exp2logy
相关产品推荐
相关产品推荐

