python进阶--正则表达式(2)

时间:2024-10-09 09:14:34

一、初识正则表达式

为了使计算机具有在文本中检索某种模式的能力,我们引入了正则表达式。
正则表达式为高级的文本模式匹配、抽取或者文本形式的搜素和替换功能提供了基础。利用正则表达式能够匹配多个字符串
正则表达式的强大之处在于引入了特殊字符来定义字符集、匹配子组和重复模式。由于有了这些特殊符号,正则表达式可以匹配字符串集合,而不仅仅是某单个字符串。

特点:

灵活性、功能性、逻辑性强
可以用简单的方式对字符串实现复杂控制

二、正则匹配规则

∙ \bullet 数字和字母都表示它本身
∙ \bullet 很多字母前加 \ 会有特殊含义
∙ \bullet 绝大多数标点符号都有特殊含义,需要用加 \

三、正则匹配模式

∙ \bullet 特殊符号的含义

表示法 描述 示例 结果
liter 匹配文本字符串的字面值 foo foo
re1 I re2 匹配正则表达式re1或者re2 aIb a或者b
. 匹配任意字符(除\n) 俩a间插入任意字符
^ 匹配字符串起始部分
$ 匹配字符串结束部分
* 匹配0次或多次前面出现的正则表达式
匹配1次或多次前面出现的正则表达式
+ 匹配0次或1次前面出现的正则表达式
{N} 匹配N次前面出现的正则表达式 [0-9]{3} 任意三位数
{N,M} 匹配N~M次前面出现的正则表达式 [0-9]{3,5} 任意三位数或四位数或五位数
{N,} 匹配N次以上前面出现的正则表达式
{,N} 匹配N次及以下前面出现的正则表达式
[…] 匹配来自字符集的任一字符
[.x-y…] 匹配x-y范围的任一字符
[^…] 不匹配此字符集中的任意字符
(…) 匹配封闭的正则表达式,然后另存为子组
() 表示一个分组

∙ \bullet 特殊字母的含义

表示法 描述 示例 结果
\d 匹配任意十进制数字,等同[0-9],\D表示不匹配数字
\w 表示匹配数字字母字符和 _, \W相反
\s 表示匹配任意非打印字符,如空格字符,\S匹配非空白字符
\b 匹配任何单词边界
\t 表示一个制表符

四、re模块

4.1查找相关方法

方法名 描述 格式
match 从头 查找字符串,返回一个对象,匹配失败返回None match(pattern, string, flags=0) pattern为正则匹配规则,flag为正则修饰符
search 查找整个字符串,返回一个对象,匹配失败返回None search(pattern, string, flags=0)
finditer 查找所有的匹配数据,finditer返回的结果是一个可迭代对象,里面的数据都是匹配到的结果,也是对象 finditer(pattern, string, flags=0)
findall 把查找的的所有字符串结果放到一个列表里 findall(pattern, string, flags=0)
findmatch 从头完整匹配,失败为None findmatch(pattern, string, flags=0)

4.2 替换(sub)

(pattern, repl, string, count=0, flags=0)  # repl表示替换后的字符或函数,count表示替换次数
  • 1

如果repl为一个函数,sub内部会自动调用该函数并传参,参数为每一个匹配到的格式的数据

4.2 类

方法和属性 描述
pos 搜索开始的位置
enpos 搜索结束的位置
string 搜索的字符串
re 当前使用的正则表达式的对象
lastindex 最后匹配的组索引
lastgroup 最后匹配的组名
group(index=0) 某个分组匹配的结果。index=0,匹配整个正则表达式
groups() 所有分组的匹配结果,为列表类型
groupdict() 返回组名为key,每个分组的匹配结果为value的字典
start([ ]) 获取组的开始位置
end([ ]) 获取组结束的位置
sapn([ ]) 获取组的开始和结束位置
expand(template) 使用组的匹配结果来替换template的内容,并把替换后的字符串返回

4.3 类

使用方法:

  a = (正则规则)  # a为Pattern对象
  b = (要匹配的字符串1)
  c = (要匹配的字符串2)
  • 1
  • 2
  • 3

五、正则修饰符

正则修饰符 描述
让 . 匹配换行
忽略大小写
让$ 匹配到换行

六、贪婪模式和非贪婪模式

在正则模式里会默认尽可能匹配更多的字符串,即贪婪模式。在贪婪模式会加 ?会切换到非贪婪模式。