目录
re模块操作
在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个re模块,通过group进行分组显示
元字符
字符 | 功能 |
. | 匹配任意符号(除换行符外(\n)) |
\d | 匹配数字 |
\w | 匹配所有的有效字符(字母、数字、下划线_、各国语言符号) |
\s | 匹配空白位 (如:空格、\t) |
^ | 匹配以xx开头 |
$ | 匹配以xxx结尾 |
[] | 匹配[]中的任一字符,列举 如: [0123456789] [A-Za-z0-9_] |
举例(re.match表示以匹配开头):
1.匹配第一个字符 .
2.匹配第一个数字 \d
如果想匹配后面的数字,可以使用返回对象的group方法来显示
3.匹配第一个有效字符 \w
4.匹配第一个空格 \s
5.匹配以什么结尾 $,“\d.*表示数字开头后面任意位的任意符号”
6.匹配任一字符 []
反义符
字符 | 功能 |
\D | 匹配非数字 |
\W | 匹配特殊符号,即除了字母,数字,下划线,各国语言符号外 |
\S | 匹配非空白位 |
[^] | 匹配列举反义 ^[]和[^]有区别 |
举例: ^[]和[^]
1.匹配以1开头, ^[]
2.匹配非1开头,[^]
转义符
\ 用来作转义使用,如匹配邮箱中的"."使用时加转义符否则就表示为正则中的"."(即匹配任意字符)
python中需要两个“\\”来表示一个“\”,正则中也是如此
如:可以在在前面加r(表示只关心正则中的\\)就不用写那多“\\”了
数量
字符 | 功能 |
* | 匹配前⼀个字符出现0次或者⽆限次 |
+ | 匹配前⼀个字符出现1次或者⽆限次 |
? | 匹配前⼀个字符出现0次或者1次 |
{m} | 匹配前⼀个字符出现m次 |
{m,} | 匹配前⼀个字符⾄少出现m次 |
{m,n} | 匹配前⼀个字符出现从m到n次 |
例: * 和 + 的区别,在于前一个字符出现0次或一次
单词边界和非边界(\b \B)
例(\b匹配左右要加空格,\B不加):
分组
字符 | 功能 |
| | 匹配左右任意⼀个表达式 |
(ab) | 将括号中字符作为⼀个分组 |
\num | 引⽤分组num匹配到的字符串 |
(?P<name>) | 分组起别名 |
(?P=name) | 引⽤别名为name分组匹配到的字符串 |
举例:
1.匹配163或qq邮箱,注意"."的匹配
2.匹配html标签
3.别名形式
re模块高级操作
search
如:寻找数字
findall
如:寻找所有数字
sub
如:替换所有数字
split
贪婪和非贪婪模式
python⾥数量词默认是贪婪的(就想一口吃成大胖子),匹配尽可能多的字符;⾮贪婪则相反,匹配尽可能少的字符。
在*、?、+、{m,n}、{n,}后面加上?,将贪婪模式转换为非贪婪模式
例1: *?
例2:??,+?,尽可能少的去匹配
例3:{n,m}?,{n,}?,相当于将前一个数字卡在等于n次