正则2021/7/14

1.下面先放规则,方便查看

'.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
'^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$'     匹配字符结尾, 若指定flags MULTILINE ,re.search('foo.$','foo1\nfoo2\n',re.MULTILINE).group() 会匹配到foo1
'*'     匹配*号前的字符0次或多次, re.search('a*','aaaabac')  结果'aaaa'
'+'     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
'?'     匹配前一个字符1次或0次 ,re.search('b?','alex').group() 匹配b 0次
'{m}'   匹配前一个字符m次 ,re.search('b{3}','alexbbbs').group()  匹配到'bbb'
'{n,m}' 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
'|'     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
'(...)' 分组匹配, re.search("(abc){2}a(123|45)", "abcabca456c").group() 结果为'abcabca45'
'\A'    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的,相当于re.match('abc',"alexabc") 或^
'\Z'    匹配字符结尾,同$ 
'\d'    匹配数字0-9
'\D'    匹配非数字
'\w'    匹配[A-Za-z0-9]
'\W'    匹配非[A-Za-z0-9]
's'     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
'(?P...)' 分组匹配 re.search("(?P[0-9]{4})(?P[0-9]{2})(?P[0-9]{4}
re.match 从头开始匹配

re.search 匹配包含

re.findall 把所有匹配到的字符放到以列表中的元素返回

re.split 以匹配到的字符当做列表分隔符

re.sub 匹配字符并替换

re.fullmatch 全部匹配
View Code

2.模式

# 1正则的N种模式,我们用re.S就行
"""
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
re.M(MULTILINE): 多行模式,改变’^’和’$’的行为
re.S(DOTALL): 改变’.’的行为,make the ‘.’ special character match any character at all, including a newline; without this flag, ‘.’ will match anything except a newline.
re.X(re.VERBOSE) 可以给你的表达式写注释,使其更可读,下面这2个意思一样
"""
View Code

3.方法

# 2.1findAll(查找规则,字符串,查找模式)
import re
s = """有时幸福就像手心里的沙,握得越紧,失去得越快;
有时幸福就像隔岸的花朵,隐约可见,却无法触摸。
两个人的世界里,总要一个闹着、一个笑着、一个吵着、一个哄着。"""
rule = "一个"
res = re.findall(rule,s,re.S)#这个结果就是list

# 2.2search(查找规则,字符串,查找模式)
res = re.search(rule,s)#查找 全文找一次
# 2.3match(查找规则,字符串,查找模式)
res = re.match("",s)#从开头就开始匹配
print(res.group())#查找到的东西
print(res.groups())#空,别用他
print(res.start())#开始的下表
print(res.end())#结束的下标
View Code

4.警告

你需要记住,你的开头结尾,有什么区别,开头结尾是匹配的整个s,是有区别的

# 查找邮箱
rule = "[0-9]{6,12}@qq.com"
rule = "^[0-9]{6,12}@qq.com$"
s = """有时幸福就像手心里的沙,1234567@qq.com握得越紧,失去得越快;
有时幸福就像隔岸的花朵,隐约可见,却无法触摸。
两个人的世界里,总要一个闹着、一个笑着、一个吵着、一个哄着。"""

5.例子:

5.1查找邮箱

 

"""
我的理解:
[字符范围] 切记是字符,他不识别字符串
(这个玩意是分组,分组完毕再合并)
{n,m}匹配n到m次
[0-9] = [\d]
"""
# 例子1:查找全部匹配邮箱
import re
rule = "([\d]{5,12})(@)(qq|163)(.com)"#用这种分组
s = """12162@qq.com"""
res = re.search(rule,s,re.S)
print("".join(res[0]))#将数组拼接起来
# 例子2:匹配单个邮箱
import re
rule = "\d{5,12}@(qq|163).com"
s = "11111@qq.com"
res = re.search(rule,s,re.S)
print(res.group())

 


 

 

 

posted @ 2021-07-14 09:16    阅读(54)  评论(0编辑  收藏  举报