re正则表达式分为六个大类
https://www.cnblogs.com/edwardsun/p/4421773.html
1,单个字符的匹配
使用的是re.findallI() 这个函数进行匹配,这个函数有三个参数
第一个参数是 :匹配什么样的单个字符
第二个参数是: 匹配的目标字符串
第三个参数是: flags = re.I 它的意思是区不区分大小写,如果有这个参数就区分大小写,没有就不区分
print(re.findall(r'a', 'abcA,123嘿嘿abcABC', flags=re.I))
https://www.runoob.com/python/python-reg-expressions.html
这个网站有很多的单个字符匹配的方法入 d,w,s...等
2,多个字符符的匹配
print(re.findall(r'a{2}', 'aaabbb')) # ['a', 'a', 'a']
像这种就是多个字符的匹配
其中有几种写法
1,ab{n,}代表的是n个b到无数个b这这种的形式
2,ab{,n} 这个表示的是从0个b到第n个b (还需要注意的是优先考虑的是 b到n个的b,这样依次的考虑,直到只剩下a,在考虑a)
3, ab{a,b}这个表示的是从a个b到b个b这种形式 (着里和上面是一样的需要注意的是优先考虑的是 b到b个的b,这样依次的考虑,直到只剩下a,在考虑a)
还有就是特殊符号的重复
1,*号代表的是0个到n个的意思
print(re.findall(r'ab*', 'aababbabbbabbbb'))
2.+ 号是代表的是匹配的是至少是一个的,然后到n个
print(re.findall(r'ab+', 'aababbabbbabbbb'))
3,?: 代表的是匹配到的是0 个到1 个的
print(re.findall(r'ab?', 'aababbabbbabbbb'))
多行字符的匹配
import re s = """http://www.baidu.com https://sina.com.cn https://youku.com haam abchttp://www.oldboy.com """ # ^代表以什么开头,$代表以什么结尾,必须结合flags=re.M来完成多行匹配 print(re.findall(r'^http.+com$', s, re.M)) # ['http://www.baidu.com', 'https://youku.com']
分组匹配多行字符 :() 就是一个一个的分组
专门处理分组的方法:分组,分组编号,有名分组,取消分组
取消分组: 必须写(),但是()为分组语法,我们只是想通过()将一些数据作为整体,所以()必须,再取消分组即可
(?:) 取消分组只是作为整体 (?P<名字>) 有名分组
# (?:) 取消分组只是作为整体 (?P<名字>) 有名分组 url = 'www.baidu.com,www.youku.com' res = re.match(r'((?:www).(?P<name>[a-z]+).com)', url) # print(res) # <_sre.SRE_Match object; span=(0, 13), match='www.baidu.com'> print(res.group(1)) # www.baidu.com print(res.group(2)) # baidu print(res.group('name')) # baidu
拆分与替换
import re s = 'a b ac def' print(s.split(' ')) # ['a', 'b', 'ac', 'def'] # 正则拆分 s = 'a b,ac@def' print(re.split(r'[ ,@]', s)) # ['a', 'b', 'ac', 'def'] s = 'python abc python' print(re.sub('python', 'Python', s)) # Python abc Python print(re.sub('python', 'Python', s, count=1)) # Python abc python # 结合分组可以完成信息的重组与替换 s = 'day a good!!!' # 'a good good day' print(re.sub('(day) (a) (good)', r'today is 2 3 3 1', s))