"""
元字符:
普通字符: re.findall('ab','abdfetdfg') 匹配ab,python中也可以匹配中文
或关系: | re.findall('a|b','adtfbkitj')匹配a,b
匹配单个字符: . re.findall('张.丰',"张三丰,张无忌,张无敌")匹配张三丰,除换行
匹配字符集: [] [#_a0-9a-z] re.findall('[0-9]','asd4613') 匹配[]中任意一个字符4,6,1,3
字符集取反: ^ [^_#0-9a-z] re.findall('[^_#0-9a-z]','124ljligiABC') 匹配[]中没有的字符,匹配A,B,C
匹配字符串开头: ^ re.findall('^jocker','jocker,wanzha')
匹配字符串结尾: $ re.findall('jocker$','jocker,wanzha')
匹配字符重复: * 匹配前面的字符出现0次或者多次
匹配字符重复: + 匹配前面的字符出现1此或多次
匹配字符重复: ? 匹配前面的字符出现0此或1次
匹配字符重复: {n} 匹配前面的字符出现n次
匹配字符重复: {m,n} 匹配前面的字符出现m到n次
匹配任意(非)数字字符: \d:匹配任意数字字符([0-9]) \D:匹配任意非数字字符([^0-9])
匹配任意(非)普通字符: \w:匹配任意普通字符(数字,字母,下划线,汉字) \W:匹配任意非普通字符
匹配任意(非)空字符: \s:匹配空字符(指空格 \r \n \t \v \f字符) \S:匹配非空字符
匹配开头结尾位置: \A:表示开头位置 \Z:表示结尾位置
匹配(非)单词的边界位置: \b:表示单词边界(单词边界指数字 字母汉字下划线与其他字符的交界位置) \B:表示非单词边界
2.正则表达式转义
1.在使用正则表达式匹配特殊字符需要加\表示转移,特殊字符有: . * + ? ^ $ [] () {} | \
使用特殊字符时用\.表示特殊字符.
2.在编程中使用原生字符串书写正则表达式避免多重转义
python字符串 ---> 正则 ---> 目标字符串
"\\$\\d+" 解析为 \$\d+ 匹配 "$100"
"\\$\\d+" 等同于 r"\$\d+"
3.贪婪模式非贪婪模式
贪婪模式:默认情况下,匹配重复的元字符总是尽可能多的向后匹配内容。比如: * + ? {m,n}
非贪婪模式:让匹配重复的元字符尽可能少的向后匹配内容
在匹配重复元字符后加‘?’号即可 如: *?
4.正则表达式分组
1.在正则表达式中,用()建立正则表达式的内部分组,子组正则表达式的一部分,可以作为内部整体操作对象
2.re.search(r"(ab)+","abaabbababa").group()
3.捕获组
给正则表达式起个名字,表达该子组的含义,这种名称的子组称为捕获组
re.search(r'(?P<组名>ab)+‘,“abababaaab”).group(组名)
5.re模块使用
1.re的使用
1.re.finditer(pattern,string,flags=0) 返回值是可迭代对象
2.re.fullmatch(pattern,string,flags=0) 完全匹配一个字符串
3.re.match(pattern,string,flags=0) 匹配某个字符串开始位置
4.re.search(pattern,string,flags=0) 匹配目标字符串第一个符合的内容
1.re.findall(patern,s,flags=0)
2.regex = re.compile(pattern,flags=0)
regex.findall(s)
3.re.split(pattern,s) 按照正则表达式匹配内容切割字符串,返回字符串列表
4.re.sub(pattern,replace,string,max,flags=0) replace表示替换的字符串 max表示替换几处
5.re.subn(pattern,replace,string,max,flags=0) replace表示替换的字符串 max表示替换几处返回替换了几处
2.compile对象使用
regex= re.compile(pattern)
regex.findall(str)
3.match对象使用
"""
import re
l = re.findall('-*[0-9]+',"-45,82,64,7,-8")
# 匹配除空格以外的字符,可以出现一次或多次
l =re.findall('[^ ]+','sdf,!@#e,87,@yg*#,Ert')
# 匹配任意(非)空字符
l= re.findall('\w+\s+\w+',"hello world")
l=re.findall('\S+',"hello world")
# 匹配开头结尾位置:\A \Z
l=re.findall('\Ahello','hello world')
l=re.findall('world\Z','hello world')
# 匹配(非)单词的边界位置:
l=re.findall(r'\bis\b',"this #is my book")
l =re.findall(r'\Bis\b',"this is my book")
l = re.findall(r'\b\d+\b','123,45,#55,NUM123')
print(l)
python元字符
于 2022-04-10 11:09:00 首次发布