re的总结

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))
原文地址:https://www.cnblogs.com/WBaiC1/p/10842596.html