python正则表达式
正则表达式
1.什么是正则表达式
- 正则表达式是独立于然和一门语言的技术,不依赖其他语言的
- 本质上是一个字符串,只不过有些字符被赋予特殊的含义,可以让我们使用该字符串对其他字符串进行查找,匹配,切割,替换的操作
2.正则表达式的实现
import re
res1`= re.findall(正则表达式,需要备被操作的字符)
3.写正则表达式的流程
- 有大量的文本
- 寻找规律
- 根据过滤和正则语法编写正则表达式
4.正则表达式的语法
4.1 字符相关的语法
- 固定的文本字符串本身其实就是一个正则表达式
- 注:字符串前r的作用是防止字符转义的
import re
text= '大家好我是lowreed 请叫我lowreed'
res = re.findall(r'lowreed',text)
print(res) #['lowreed', 'lowreed']
- 包含字符[] 判读包含某一个
import re
text= '大家好我是lowreedba 请叫我lowreedab'
res = re.findall(r'lowreed[a]',text)
print(res) # ['lowreeda']
- 含有特殊字符[0-9] , [a-z]
import re
text= '大家好我是lowreedba 请叫我lowreedab'
res = re.findall(r'lowreed[a-z]',text)
print(res) #['lowreedb', 'lowreeda']
#匹配a-z中的字符
- \d表示数字0-9任意一个
- {n} n表示紧跟着大括号的符号出现了多少次
- {n,} 表示匹配n个及n个以上
- {n,m}n表示最小匹配次数, m表示最大匹配次数
text= '大家好我是lowreed6666 请叫我lowreed666 我不是lowreed66'
#匹配字符后数字为3-4个
res = re.findall(r'lowreed\d{3,4}',text)
print(res) #['lowreed6666', 'lowreed666']
-
表示数量
- ? 表示出现了0次或者1次
+
表示出现了1次或者n次*
表示出现了0次或者n次
-
\w 大写字母 数字下划线 汉字
-
\W除了大小写字母 数字下划线, 匹配其他字符
-
.
表示任意字符
import re
text= '大家好我是lowreed6666@@ 请叫我lowreed666** 我不是lowreed66中国'
res = re.findall(r'lowreed\w*',text)
print(res) #['lowreed6666', 'lowreed666', 'lowreed66中国']
匹配原身字符.的方式: 可以加\字符
4.2正则表达式使用的注意事项
- 在使用数量相关语法的正则情况下,默认python使用的是贪婪匹配
4.3 正则进阶使用
- ()分组
import re
text= '341234200001011234 13812345678'
res= re.findall(r'(34\d{4}(\d{4})\d*)',text)
print(res) #[('341234200001011234', '2000')]
#单独的去出身份证号码, 身份证的上出身年份
- 或
import re
text= '1234@qq.com 1234@163.com 1234@1@3.com'
res= re.findall(r'(\w*@(qq|163).com)',text)
print(res)#[('1234@qq.com', 'qq'), ('1234@163.com', '163')]
- ^以XXX开头匹配
- $以XXX结尾匹配
4.4 re的模块函数
-
findall()在大字符串中查找所有符合正则表达的小串,返回一个符合结果的列表
-
search()从左向右匹配,智慧匹配一次
-
match()从左向右,从第一个字符开始匹配,如果第一个字符不符合,停止匹配
-
split() 以正则的形式切割字符串
import re
text= '1234@qq.com 1234@163.com 1234@1@3.com'
res= re.split(r'@qq',text)
print(res) #['1234', '.com 1234@163.com 1234@1@3.com']