公众号:uncle39py

V1

2022/08/22阅读:26主题:默认主题

史上最简单易记的正则表达式学法,没有之一

正则表达式

一.匹配符

.表示匹配任意一个字符,

比如b.可以匹配ba bb bc bd等等,.可以理解成省略号...,省略一个任意字符;

比如bby,通过b.可以匹配出bb,不能匹配出by

^表示匹配开始位置

比如^b,可以匹配以b开头的字符b,比如bbba可以匹配到最开头的b,如果是cbba则匹配不到里面的b

^上尖号,理解成顶天,行首

$表示匹配结尾位置

比如ca$,可以匹配以ca结尾的支符串ca,与上尖号类似

$现状像尾巴,故匹配结尾位置

\d表示匹配一个数字,相当于[0-9],digit:数字.

\D表示匹配一个非数字,相当于[^0-9]

\s表示匹配任意的一个空白字符,space:空格

\S表示匹配任意的一个非空白字符

\w表示匹配一个数字、字母、下划线,word:单词

\W表示匹配一个非数字、字母、下划线

二.限定符

*星号,匹配前一个字符出现0到n次

比如b*会匹配b这个字符出现0次到n次,

如果是bobbby,则会匹配出b(1次),bbb(3次,取最大串)

想想天上的星星,可以看不见星星,也可以有满天星星(0,到n次)

+ 匹配前一个字符出现1到n次

每次增加,至少要增加1以上,所以匹配前一个字符出现1到n次

?匹配前一个字符出现0到1次

问号,问你有没有,有1无0,所以只匹配前一个字符出现0到1次

{m,n}匹配前一个字符出现m到n次,包含m与n

三.逻辑符

|

o|cb会把|这个两边的字符串当成整体,即匹配出ocb

(o|c)b会匹配出obcb

与程序中的或符号||对应记忆

\\转义字符

以上出现的,带有含义的字符,转以后都变成普通的字符

\\.代表匹配字符.

\\代表匹配字符\

[]字符集,代表匹配这里面的任意的一个字符

[]里面如果出现-,则代表一个区间,如果想使用-字符,而非使用区间,则将-写到[]开头

[]里面出现的其他字符,都是纯字符,比如[.]仅代表.字符,不带有其他含义

正则表达式python接口

一.match 匹配,提取

info = "姓名:bobby1987 生日:1987年10月1日 本科:2005年9月1日"

match_res = re.match('.*生日.*\d{4}',info)
#1.match方法是从字符串的最开始匹配的,所以前面要加上.*
#2.match方法是按照最长的能匹配到的串来截取的

match_res = re.match('.*生日.*?\d{4}',info)
#3.这里加了一个问号后,就按照第一个能匹配到的串来截取(不是最长的串)

match_res = re.match('.*生日.*?(\d{4}).*本科.*(\d{4})',info)
#4.match提取字符串:将想要的字符串用括号括起来,使用如下方法提取
print(match_res.group(2))
#match_res.group(0)代表匹配到的总的字符串
#match_res.group(1)是提取自己括起来的第一个括号内的内容

match_res = re.match('.*生日.*\d{4}',info,re.I)
#re.I代表忽略大小写

match_res = re.match('.*生日.*\d{4}',info,re.DOTALL)
#match匹配的截止位置是回车换行符,意思是只匹配一行,如果数据有换行,并且在第二行就匹配不到
#re.DOTALL参数代表可以匹配回车换行

二.search 搜索

search_res = re.search('生日.*\d{4}',info)
#1.search与match用法相似,但是有以下两个不同点
#search不是从字符串头部开始匹配的,所以最前面不要加.*
#search默认可以匹配回车换行符,不需要参数re.DOTALL

三.sub 替换

res = re.sub('\d{4}','2019',info)
#将所有的4位数字替换成2019

#还有一个方法了解一下即可
print(re.findall('\d{4}',info)) #返回一个列表,里面有查询出来的所有值

分类:

后端

标签:

Python

作者介绍

公众号:uncle39py
V1