- 正则表达式
- 1.认识正则表达式
- 2.导入re模块中的常用函数
- 3.符号的用法
- 4.转义字符的用法
- 5.re模块的常用函数
- 6.代码示例
2.导入re模块中的常用函数1.什么是正则表达式
正则表达式是一种可以让复杂的字符串问题变得简单的工具
正则并不是Python特有的语法(不属于Python),所有的高级语言都支持正则,正则的语法通用
不管通过正则表达式解决的是什么问题,写正则的时候都是咋子使用正则表达式描述字符串规则。2.Python的re模块
re模块时Python用来支持正则表达式的一个模块,模块中包含了所有和正则相关的函数
fullmatch(正则表达式,字符串) - 判断正则表达式好指定的自负歘是否完全匹配(判断整个字符串是否符合正则表达式所描述的规则);如果匹配成功返回匹配对象,失败返回None
from re import fullmatch, findall3.符号的用法
字符 | 功能 |
---|---|
. | 匹配任意字符 |
^ | 开头、在[]中表示非 |
$ | 以某个字符结尾 |
* | 匹配任意次数个的字符 |
+ | 匹配1次或多次个的字符 |
? | 匹配0次或者1次个的字符 |
[] | 表示匹配方括号中任意的一个字符 |
{M,N} | 匹配M次到N次的字符 |
() | 表示分组 |
转义字符 | 功能 |
---|---|
d | 表示一个数字类型的字符 |
D | 表示一个非数字类型的字符 |
s | 表示一个空白类型的字符 |
S | 表示一个非空白类型的字符 |
b | 表示单词边界 |
B | 表示非单词边界 |
w | 表示任意的字母数字字符,相当于[a-zA-Z0-9] |
W | 表示非字母数字字符 |
函数 | 功能 |
---|---|
fullmatch() | 完全匹配,匹配失败则返回None |
match() | 匹配开头字符,匹配失败返回None |
search() | 匹配第一个能够和正则符合的子串,找不到则返回None |
findakk() | 返回的是满足所有条件的子串(用列表包装) |
finditer() | 返回的是满足条件的所有子串(用迭代器包装) |
split() | 返回的是满足切割条件进行切割的子串 |
sub(正则,字符串1,字符串2) | 字符串2中满足正则的内容替换成字符串1,并返回 |
# 基本用法 result = fullmatch(r'a[MNd]b', 'aNb') #result1 = fullmatch(r'a[^MNd]b', 'aBb') # result2 = fullmatch(r'[1-9]d{4,11}', '1234567') # # 分组 result3 = fullmatch(r'([A-Z]{3}d{2})[u4e00-u9fa5][A-Z]{3}', 'SDF55哈SDF') result4 = fullmatch(r'(d{2})([a-z])[u4e00-u9fa5]{2}12', '55s哈哈55s') # AttributeError: 'Match' object has no attribute 'match' # 属性错误:'Match'对象没有属性'match' result5 = fullmatch(r'([a-z])(d{3})[u4e00-u9fa5]{2}2', 's825哈哈825') print(result5.span()) # (0, 9) # 重复 message = '我今年18岁,月薪50088元,身高188,体重70公斤,8块腹肌。每年交308元的腾讯会员费。房贷每月3000元,车贷每月2288元。' result6 = findall(r'd+元', message) # ['50088元', '308元', '3000元', '2288元'] # 捕获 result7 = findall(r'(d+)元', message) # ['50088', '308', '3000', '2288'] # 分支 result8 = findall(r'算([u4e00-u9fa5]|[u4e00-u9fa5]{2})求', '算什么求,算了,不算嘛求了') # ['什么', '嘛'] # 转义 result9 = findall(r'\d+.d+', 'd.879') # ['\d.879'] message1 = '12sadf456,asd史蒂夫54;sdf55;5adsf;asd;5 =8 55=sf ' result10 = findall(r'd+', message1) # ['12', '456', '54', '55', '5', '5', '8', '55'] result11 = findall(r'd+b', message1) # ['456', '54', '55', '5', '8', '55'] result12 = findall(r'bd+', message1) # ['12', '5', '5', '8', '55'] result13 = findall(r'Bd+B', message1) # ['2', '45', '5', '5'] # match() result = match(r'd{3}', '546ashfjhas') print(result) # # search() result = search(r'd{3}', 'asdf645asddd555asd') print(result) # # finditer() result = finditer(r'd{3}', 'asdf645asddd555asd') print(list(result)) # [ , ] # split() str1 = '123JHSKkxc会计哈决胜巅峰JLSKD855JAD==' # 将str1中的J和K作为切割点对字符串进行切割 result = split(r'J|K', str1) print(result) # ['123', 'HS', 'kxc会计哈决胜巅峰', 'LS', 'D855', 'AD=='] # sub() result = sub(r'd', '+', '123JHSKkxc会计哈决胜巅峰JLSKD855JAD==') print(result) # +++JHSKkxc会计哈决胜巅峰JLSKD+++JAD== # group() result = search(r'(d{3})([A-Z]{2})', '-=2设计师234KM222哈哈宿舍239KH') print(result.group(1)) # '234' # (?i) result = fullmatch(r'(?i)abc', 'ABC') # print(result) # (?s) result =fullmatch(r'(?s)abc.123', 'abcn123') # print(result)