1.re.search(r"正则表达式",待匹配字符串)
返回值:找到则返回目标的第一个字符串,可以用.span返回正则表达式在待匹配字符串中位置,找不到返回None
2.re.findall(r'正则表达式',str)
返回值:返回一个列表,包含所有符合表达式的字符串。
正则表达式[char1,char2,char3....]字符组,允许匹配一组可能出现的字符。
3.区间与区间取反
区间:- 正则表达式引擎在字符组中使用连字符(-)代表区间,所以我们匹配任意数字可以使用[0-9]
,所以如果我们想要匹配所有小写字母,可以写成[a-z]
,想要匹配所有大写字母可以写成[A-Z]
例如:a = - re.findall(r'[0-9]','xxx007abc')
区间取反:^不会出现的字符定义字符组,加在正则表达式前则从头取反,加在某个字符后则意味着从某个字符开始取反
例如:a = re.findall(r'[^0-9]','xxx007abc')
a = re.findall(r'n[^e]','final')
4.正则表达式快捷方式
\w | 与任意单词匹配 |
\d | 与任意数字匹配 |
\s | 匹配空白字符,比如空格,换行等 |
\b | 匹配一个长度为0的子串 |
快捷方式小写改为大写则为取反
5.字符串的开始与结束
^表示字符串的开始,$表示字符串的结束
6.通配符.
在字符组中外使用.可代表任意字符
例:a=re.findall(r".ython",input_str)
7.可选字符
在字符后加?表示该字符可选。
8.重复和重复区间
重复:在正则表达式在一个字符组后加上{N}
就可以表示 {N}
之前的字符组出现N
次。
例:a = re.findall(r'[\d]{4}-[\d]{7}','张三:0731-8825951,李四:0733-8794561')
重复区间:在不确定重复次数时可以使用重复区间{M,N},表示重复次数在M-N之间的都会被筛选
9.开闭区间与速写
知道此处会填写什么格式,但是我们不确定填写的内容。比如说每月支出,我们知道此处一定是数字,但是不确定这个月支出了多少钱,是3
位数,还是4
位数,说不定这个月就花了10个亿
。这时候我们可以用开区间来表示此范围,如下所示:
例:a = re.search(r'[\d]{1,}','我这个月花了:5元')
用速写符号表示:
'+' | 重复匹配1个或多个 |
'*' | 重复匹配0个或多个 |
10.分组和命名分组
分组:可以在长的正则表达式中通过()来分组,通过group(index)来索引。
命名分组:
命名分组就是给具体有默认分组编号的组另外再起一个别名,方便以后的引用。 命令分组的语法格式如下:
(?P<name>正则表达式)
11.先行断言
正向先行断言
(?=pattern)
表示正向先行断言,整个括号里的内容(包括括号本身)代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern
。
例:a = re.findall(r'n(?=al)','final')
反向先行断言
(?!pattern)
表示反向先行断言,与正向先行断言相反,紧接该位置之后的字符序列不能够匹配pattern
。反向先行断言不支持不定长
例:a = re.findall(r'n(?!e)','final')