python中正则是内置的一个包,使用的时候需要导包import re
一、简单的使用正则
-
1、匹配数字,如果匹配成功就有返回,否则就返回
noneimport re re1 = re.match('\d+', '44557575757') re2 = re.match('\d+', 'abc33') print(re1) print(re2)
二、元字符的认识
- 1、具有特殊意义的元字符
\:转义字符,转义后面字符所代表的含义^:以某一个元字符开始$:以某一个元字符结束\n:匹配一个换行符.:除了\n以外的任意字符\o:NUL字符(\u0000)\t:制表符(\u0009)\v:垂直制表符(\u000B)\f:换页符(\u000C)\r:回车符(\u000D)
- 2、代表出现次数的量词元字符
*:出现0到多次+:出现1到多次?:出现0次或者1次(或取消捕获时候的贪婪性){n}:出现n次{n,m}:出现n到m次
三、修饰符的认识
x|y:x或y中的一个[xyz]:x或y或z中的一个[^xyz]:除了xyz以外的任意一个字符[a-z]:a-z之间的任何一个字符[^a-z]:除了a-z之间的任何一个字符\d:一个0~9之间的数字\D:除了0~9之间的数字以外的任何字符\b:一个边界符\w:数字、字母、下划线中的任意一个字符\s:匹配一个空白字符、空格():分组,把一个大正则本身划分成几个小的正则,例如:var reg = /^(\d+)zhufeng(\d+)$/;
四、几个常用的方法介绍
-
1、
compile生成正则的,不能单独使用,要和下面的方法一起使用,不用这个也可以- 使用语法
- pattern : 一个字符串形式的正则表达式
- flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
- re.I 忽略大小写
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M 多行模式
- re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- re.X 为了增加可读性,忽略空格和 # 后面的注释
import re if __name__ == "__main__": print(re.match(re.compile(r'www', re.I), 'www.runoob.com')) - 使用语法
-
2、
group就是获取正则匹配的结果,不能单独使用import re if __name__ == "__main__": reg = re.match(re.compile(r'www', re.I), 'www.runoob.com') print(reg.group()) -
3、
match从开头匹配print(re.match('www', 'www.runoob.com')) # 忽视大小写 print(re.match('wwW', 'www.runoob.com', re.IGNORECASE)) -
4、
search查找字符中的数据,返回第一个匹配成功的import re if __name__ == "__main__": print(re.search('www', 'www.runoob.com', re.MULTILINE)) print(re.search('com', 'www.runoob.com', re.MULTILINE)) -
5、
findall在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表语法:正则.findall(匹配的字符串,[开始位置],[结束位置])
import re print(re.compile(r'\d+').findall('jhkjhkkh12jkjk32h2jj4j345jj333')) # 返回的:['12', '32', '2', '4', '345', '333'] print(re.compile(r'[a-z]+', re.IGNORECASE).findall('jhkjhkkh12jkjk32h2jj4j345jj333ASS')) # 返回的:['jhkjhkkh', 'jkjk', 'h', 'jj', 'j', 'jj', 'ASS'] -
6、
finditer和findall类似,只是返回的是一个迭代器(需要遍历)import re res = re.finditer(re.compile('[a-z]+', re.IGNORECASE), 'jhkjhkkh12jkjk32h2jj4j345jj333ASS') for item in res: print(item.group()) -
7、
sub查找与替换(类似javascript中的replace)-
使用语法
re.sub(pattern, repl, string, count=0, flags=0)- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
import re if __name__ == "__main__": mobile = '2004-959-559' print(re.sub(re.compile('\D+'), '#', mobile)) -
-
8、
split方法按照能够匹配的子串将字符串分割后返回列表import re if __name__ == "__main__": str = '深圳7.22首次线下大课:分期乐创始人肖文杰《增长黑客:双S曲线APP连续自App然生长》今天12点将于混沌大学app开始现场报名。首次大课,不容错过!如有疑问,咨询18069818935。回TD退订【混沌大学深圳分社】' print(re.split(re.compile(r'深圳'), str)) print(re.split(re.compile(r'(深圳)'), str))