re正则模块
- 字符串的匹配规则
- 匹配模式
- re.match()
- re.search()
- re.findall()
- re.split()
- re.sub()
- 元字符
print('--------------匹配单个字符与数字--------------')r'''. 匹配除换行符以外的任意字符[0-9] 匹配数组字符集合,表示括号内任意一个字符[jiangwei] 匹配括号内任意一个字符[a-z] 匹配任意小写字母[A-Z] 匹配任意大写字母[0-9a-zA-Z_]匹配任意数字,字母和下划线[^sunck] 匹配除了sunck以外的所以字母,^表示脱字符,表示不匹配集合中的字符[^0-9] 匹配所有的非数字字符\d 匹配数字,效果[0-9]\D 匹配非数字字符,效果[^0-9]\w 匹配数字,字母下划线,效果[0-9a-zA-Z_]\W 匹配非数字,字母下划线,效果[^0-9a-zA-Z_]\s 匹配任意的空白符(空格,换行,换页,制表),效果[ \f\n\r\t]\S 匹配任意的非空白符'''print(re.findall('\d','sunck is a22 go999od man111'))print('--------------锚字符(边界字符)----------------')'''^ 行首匹配,和[]里的不是一个意思$ 行尾匹配\A 匹配字符串开始,它和^的区别是\A只匹配整个字符串的开头,即使在re.M模式下也不匹配到他行的行首\Z 匹配字符串开始,它和$的区别是\A只匹配整个字符串的开头,即使在re.M模式下也不匹配到他行的行尾\b 匹配一个单词的边界,也就是一个单词和空格间的位置\B 匹配非单词边界'''print('-----------------匹配多个字符----------------')'''说明:下方的xyz均为假设的普通字符,n,m是非负整数,不是正则表达式的元字符(xyz) 匹配小括号内的xyz(作为一个整体去匹配)x? 匹配0个或者1个xx* 匹配0个或者任意多个x(.*表示匹配0个或者任意多个字符,换行符除外)x+ 匹配至少一个xx{n} 匹配确定个数的n个x(n是一个非负整数)x{n,m} 匹配至少n个最多m个xx|y |表示或,匹配的是x or y'''print('-----------特殊----------')'''*? +? x? 最小匹配,通常都是尽可能多的匹配,可以使用这种带问号的解决贪婪匹配(?:x) 类似(xyz),但不表示一个组'''
import re'''re.match()函数功能:尝试从字符串的起始位置匹配,如果不是起始位置匹配成功,返回None原型:match(patter,string,flags=0)参数:pattern:匹配的正则表达式 string:要匹配的字符串 flags:标志位,用于控制正则表达式的匹配方式re.I 忽略大小写re.L 做本地户识别 re.M 多行匹配,影响`和$re.S 是.匹配包括换行符在内的所有字符re.U 根据unicode字符集解析字符,影响\w \W \b \Bre.X 使我们以更灵活的格式理解正则表达式re.search()函数功能:扫描整个字符串,并返回第一个成功的匹配'''# www.baidu.comprint(re.match('www','www.baidu.com'))print(re.match('www','ww.baidu.com'))print(re.match('www','wwW.baidu.com',re.I))print(re.match('www','baidu.www.com'))'''re.search()函数原型:match(patter,string,flags=0)参数:pattern:匹配的正则表达式 string:要匹配的字符串 flags:标志位,用于控制正则表达式的匹配方式功能:扫描整个字符串,并返回第一个匹配成功的'''print(re.search('sunck','good man is sunck!sunck is nice'))'''re.findall()函数原型:match(patter,string,flags=0)参数:pattern:匹配的正则表达式 string:要匹配的字符串 flags:标志位,用于控制正则表达式的匹配方式功能:扫描整个字符串,并返回一个列表'''print(re.findall('sunck','good man is sunck!sunck is nice'))
import re'''字符串切割'''str1="sunck is a good man"print(str1.split(" "))print(re.split(r" +",str1))'''字符串的替换和修改:sub(pattern, repl, string, count=0, flags=0)、subn参数: repl 指定用来替换的字符串 string 目标字符串 count 最多替换次数功能:在目标字符串中,以正则表达式的规则,匹配字符串,再替换。区别:前者返回一个,后者是被替换的次数被替换的字符串,后者返回一个元祖,前者是被替换的字符串。'''str3='sunck is a good good good man'print(re.sub(r"(good)","nice",str3,count=2)) # type stringprint(re.subn(r"(good)","nice",str3,count=2)) # type tuple'''分组概念:除了简单的判断之外,正则表达式还有提取子串的功能。用()表示的就是就是提取分组'''str4='010-53247654'm=re.match(r"((?P \d{3})-(?P \d{8}))",str4)# 使用序号获取对应组的信息,group(0)表示原始字符串print(m.group(0))print(m.group(1))print(m.group("first"))print(m.group(3))print(m.groups())'''编译:当我们使用正则表达式时,re模块会做两件事1、编译正则表达式,如果正则表达式本身不合法,会报错2、用编译后的正则表达式去匹配对象'''# 之前使用pat=r"1(([3587])\d|(47))\d{8}$"print(re.match(pat,"13006293101"))# 编译成对象使用re_telephon = re.compile(pat)print(type(re_telephon))print(re_telephon.match("13600000000"))