正则表达式笔记

 

在正则表达式中,*.*.*? 都是用来匹配重复字符的模式,但它们的作用和行为有重要的区别。


 

1. *:零次或多次重复 (Quantifier)

 

* 本身是一个量词,它必须作用于它前面的一个字符、字符集或捕获组。

符号 含义 匹配行为 示例
X* 零次或多次匹配前面的元素 X 这是最基本的重复量词。

查找 a*b


- 在 bbb 中匹配 b (a 出现 0 次)


- 在 aab 中匹配 aab (a 出现 2 次)


- 在 cbaaa 中不匹配

2. .*:贪婪匹配 (Greedy Matching)

 

.*. (点) 和 * (星号) 的组合,表示 匹配任何字符零次或多次。默认情况下,所有正则表达式的量词都是 贪婪(Greedy) 的。

符号 含义 匹配行为 示例
.* 贪婪匹配 任何字符 (.) 零次或多次 (*)。 匹配时会尽可能多地向右延伸,直到整个模式的其余部分仍然能够匹配成功为止。

查找 a.*c


- 在 a12b3c45c 中,它会匹配整个字符串 a12b3c45c。它会越过第一个 c,尽可能多地向右匹配。

3. .*?:非贪婪匹配 (Non-Greedy or Lazy Matching)

.*? 是在贪婪模式 .* 后面添加了一个问号 ?。问号在这里的作用是修饰量词,将其从贪婪模式切换到 非贪婪(Non-Greedy)懒惰(Lazy) 模式。

符号 含义 匹配行为 示例
.*? 非贪婪匹配 任何字符 (.) 零次或多次 (*)。 匹配时会尽可能少地向右延伸,只要满足整个模式的其余部分匹配成功即可。

查找 a.*?c


- 在 a12b3c45c 中,它只会匹配第一个最短的有效字符串:a12b3c。在匹配了第一个 c 之后就停止了。

总结和对比

特性 * (作用于前一个字符) .* (贪婪匹配) .*? (非贪婪匹配)
匹配内容 零次或多次重复前面的元素。 零次或多次重复 任何字符 零次或多次重复 任何字符
匹配倾向 取决于前面的元素,默认贪婪。 尽可能多 (最长匹配)。 尽可能少 (最短匹配)。
应用场景 匹配单个字符或集合的重复,如 \d* 匹配两个已知边界之间所有内容,如果边界是唯一的。 匹配两个 重复边界 之间最短的内容,如 HTML 标签 <tag>...</tag>

2,

调试正则表达式 (Find/Replace)

1. 转义特殊字符 (最常见的原因)

在正则表达式中,.()" 都是特殊字符。您必须使用反斜杠 \ 来转义它们,让它们匹配字面意义上的字符。

您的原始表达式 str((.*)).decode("raw_unicode_escape")
推荐的查找表达式 (转义后) str\((.*)\)\.decode\("raw_unicode_escape"\)

正确的替换表达式格式

IDE / 工具 格式 含义
PyCharm / IntelliJ strExt(\1) 推荐使用 \1
VS Code / Sublime strExt($1) 推荐使用 $1
Vim strExt(\1)strExt(\01)  
Standard Unix sed strExt(\1)
posted @ 2025-11-11 10:46  Bigben  阅读(23)  评论(0)    收藏  举报