正则表达式学习笔记
这个课的第九章的学习笔记
这只是学习笔记,建议最后听一下原课程的应用实例
正则表达式入门
.
:任意一个字符
*
:量词,左侧字符串出现任意次(包括 \(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
,\r
,Tab
\w
:代表一个单词字符,诸如a
,9
,_
,蛙
\A
:边界符号,表示左边界,左边没有任何字符
\Z
:边界符号,表示右边界,右边没有任何字符
^
:边界符号,行开头
^
:边界符号,行结尾
\b
:边界符号,行结尾
\大写字母
:表示 \对应的小写字母
取反
()
:分组,分组号按左括号顺序 1index,\(0\) 代表整个串。可以通过 a.group(x)
提取第 \(n\) 个分组。分组是一个整体,可以加量词
\数字
:分组相关,代表第 \(n\) 个分组匹配上的原串 e.g. (a*b)\1
可以匹配上 aabaab
不能匹配上 aabab
|
:代表或者,aaaa|b
可以匹配 aaaa
和 b
。和 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. <.*?>