正则表达式是什么
正则表达式是小型的高度专业化的语言,是由C编写的。
正则表达式的作用
慢慢了解
正则表达式的原理
元字符
【.】通配符,只能代指除换行符外的所有的字符。
【^】尖角符,从开始位置匹配
【$】结尾符,从结束位置匹配
【*】重复匹配,重复前一个字符0到无穷次
【+】重复匹配,重复前一个字符1到无穷次
【?】重复匹配,重复前一个字符0到1次
【{n, m}】重复匹配,重复前一个字符n到m次,包含m,可小于m次,m省略为正无穷,大括号不推荐使用。
【[]】字符集,[xy]只能二选一;取消元字符的特殊功能(x和y之间不用加逗号),例如[*]就表示*,但是(-, \, ^)是例外的,[^a]尖角符是取反的意思,非a的意思;[^4, 5]4,5是一组,就是不能取4,或者5。
【\】反斜杠后面跟元字符是去除其特殊功能;后面跟普通字符是实现特殊功能.
【\d】代表任何十进制数字,等同[0-9]
【\D】代表任何非十进制数字,等同[^0-9]
【\s】匹配任何空白字符,等同[\t\n\r\f\v]
【\S】匹配任何非空白字符,等同[^\t\n\r\f\v]
【\w】匹配任何字母数字字符,等同[a-zA-Z0-9]
【\W】匹配任何字非母数字字符,等同[^a-zA-Z0-9]
【\b】匹配一个单词的边界,例如re.findall(r"\bare\b", "what is this, you are symbol, whoare,you")
【|】或的意思,通常与圆括号在一起使用,圆括号内是作为一个整体使用。
分组
()圆括号代表组概念,使用findall()返回的是匹配组内的内容,如果加上?则失效。
(?\d{3})表达的意思是给\d{3}作为一组起个名字叫做name。
非贪婪匹配
数量通配符后面加上问号,则修改为非贪婪匹配。
正则表达式的方法
re.findall(查找内容, 字符串,标志位 )返回查找的数据列表,返回所有的结果。
re.search(查找内容, 字符串, 标志位)返回匹配的第一个对象,是对象而不是结果,如果没有找到,则返回None,通过group()方法返回匹配满足条件的结果。
re.math(查找内容, 字符串, 标志位)只在字符串开始匹配,返回第一个匹配到的对象,返回的对象可以调用group()方法。
re.split(查找内容, 字符串, 最大的分割数, 标志位)按照查找的内容分割字符串返回列表,查找的内容不会显示在列表中,如果查找的内容在字符串的第一个位置,则列表中会有空的元素存在。
re.sub(查找内容, 替换内容, 字符串, 替换次数, 标志位)用于字符串替换返回替换后的字符串。
re.compile(匹配模式, 标志位)将匹配模式编译成正则表达式对象。此对象再调用上述的各种方法。
说明
字符串前面r表示原生字符串,不需要转义。
re中,使用\\表示我们看到的单个\;在python解释器中,使用\\\\表示re中的\\。
实例
匹配网址
1 #匹配url网址
2 importre3
4
5 partten = '[a-zA-Z]+://[^\s]*[.com|.cn]/'
6 string = 'https://music.163.com/#/song?id=338716'
7 result =re.search(partten, string)8 print(result)
网址匹配
匹配电话
1 importre2
3
4 partten = '\d{4}-\d{7}|\d{3}-\d{8}'
5 string = '010-32412412521512525'
6 result =re.search(partten, string)7 print(result)
匹配电话
匹配邮箱
1 importre2
3
4 partten = '^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$'
5 string = '123456@qq.com'
6 result =re.search(partten, string)7 print(result)
匹配邮箱