正则表达式学习笔记

这个课的第九章的学习笔记
这只是学习笔记,建议最后听一下原课程的应用实例

正则表达式入门

.:任意一个字符
*量词,左侧字符串出现任意次(包括 \(0\) 次)
?量词,左侧字符出现 \(\le1\)
+量词,左侧字符出现 \(\ge1\)
{n}量词,左侧字符出现 \(n\)
{n,m}量词,左侧字符出现 \(x\) 次,其中 \(n\le x\le m\)\(m\) 可以不写表示无上限
[]范围符号[a2c] 表示三选一,[a-z] 表示范围,[^a-z] 表示非(反选),[\u4e00-\u9fa5] 表示一个汉字
\d:代表一个数字,等价于 [0-9]
\s:代表一个空白字符,诸如 Space\n\rTab
\w:代表一个单词字符,诸如a9_
\A边界符号,表示左边界,左边没有任何字符
\Z边界符号,表示右边界,右边没有任何字符
^边界符号,行开头
^边界符号,行结尾
\b边界符号,行结尾
\大写字母:表示 \对应的小写字母 取反
()分组,分组号按左括号顺序 1index,\(0\) 代表整个串。可以通过 a.group(x) 提取第 \(n\) 个分组。分组是一个整体,可以加量词
\数字分组相关,代表第 \(n\) 个分组匹配上的原串 e.g. (a*b)\1 可以匹配上 aabaab 不能匹配上 aabab
|:代表或者,aaaa|b 可以匹配 aaaab。和 c++ 里的 || 一样,第一个找到了就不去匹配第二个元素了

那么,现在你已经对正则表达式的基本原理有了一定了解,就让我们来看一看下面这些简单的例子,来把我们刚刚学到的知识运用到实践中吧!

试试看

没有多余 \(0\) 的小数 -?([1-9]\d*\.\d*[1-9]|0|0\.\d*[1-9])

python 中的正则表达式

import re
a=re.match(a,S,flag=0) 从头开始a 匹配 S
a=re.search(a,S,flag=0)a 匹配 S
a=re.findall(a,S,flag=0) 没有分组时,找出所有匹配串存入 list;有且仅有一个分组时,把分组内容存入 list;否则每个匹配的所有分组构成元组,把所构成的元组存入 list 返回
a=re.sub(a,b,S,flag=0) 把所有匹配的替换成 b
a.group(x=0)a.group(x1,x2,...) 返回匹配结果第 \(n\) 个元组
a.groups() 返回所有元组的匹配结果,相当于 a.group(1,2,...n)
a.string 返回文本串
a.start(x=0)a.end(x=0)a.span(x=0) 返回第 \(x\) 个分组匹配位置开头、结尾、头尾构成的元组。

贪婪模式和懒惰模式

贪婪模式下,量词代表的数量尽量多。 e.g. 用 <.*> 匹配 <a><b>aaa 得到 <a><b>
懒惰模式下,量词代表的数量尽量多。
默认贪婪。开启懒惰模式的方式是在量词后面加上 ?。e.g. <.*?>

posted @ 2023-08-12 16:48  Peal_Frog  阅读(62)  评论(0编辑  收藏  举报