Python中r'.*'与r'[.*]'正则表达式的区别及实例解析
Python中r'.'和r'[.]'正则表达式的区别解析
嘿,这个问题问到点子上了!很多刚接触正则表达式的朋友都会在通配符/量词和字符类的用法上搞混,咱们一步步拆解清楚:
1. 先看r'.*'的含义
.是正则里的通配符,作用是匹配除换行符之外的任意单个字符(默认模式下)*是量词,用来指定前面的元素可以被匹配零次或者多次- 组合起来,
r'.*'的意思就是:匹配一段任意长度的非换行字符序列(从当前位置开始,尽可能多的匹配,也就是贪婪模式)
在你的例子里:
import re a = 'I was born in 1997' result = re.match(r'.*', a) print(result)
re.match是从字符串的起始位置开始匹配,而.*能覆盖从开头到结尾的所有字符(因为字符串里没有换行),所以就得到了匹配整个字符串的结果:<_sre.SRE_Match object; span=(0, 18), match='I was born in 1997'>
2. 再看r'[.*]'的含义
- 方括号
[]在正则里代表字符类,它的作用是:匹配方括号内列出的任意一个单个字符 - 注意:在字符类内部,原本有特殊含义的字符(比如
.、*、+这些)都会失去特殊属性,变成普通的字面字符 - 所以
r'[.*]'的意思非常明确:只匹配单个的.字符,或者单个的*字符
回到你的例子,字符串'I was born in 1997'里既没有.也没有*,re.match从第一个字符I开始检查,发现不匹配.或*,自然就返回无匹配结果了。
补充一个直观的例子
如果把字符串改成包含.或*的内容:
import re a1 = '.Hello World' a2 = '*Python is cool' print(re.match(r'[.*]', a1)) # 匹配到第一个字符'.',结果是<_sre.SRE_Match object; span=(0,1), match='.'> print(re.match(r'[.*]', a2)) # 匹配到第一个字符'*',结果是<_sre.SRE_Match object; span=(0,1), match='*'>
这样就能更清楚两者的区别啦!
内容的提问来源于stack exchange,提问作者Pran Kumar Sarkar
相关产品推荐
相关产品推荐

