You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:24:21