python
中正则是内置的一个包,使用的时候需要导包import re
一、简单的使用正则
-
1、匹配数字,如果匹配成功就有返回,否则就返回
none
import 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))