re正则匹配

import  re

#'(?P<name>...)' 分组匹配
print(re.search("(?P<id>[0-9]+)","abc12345daf@34")) #返回一个对象
print(re.search("(?P<id>[0-9]+)", "abc12345daf@34").groupdict()) #以字典形式返回匹配的值
print(re.search("(?P<id>[0-9]+)","abc12345daf@34").group()) #返回匹配的值

print(re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]+)","abc12345daf@34").groupdict()) #以字典形式返回匹配的值,第二个匹配的内容,从第一个匹配的内容后面找

print(re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]+)","abc12345daf@34").group('id')) #返回'id' [0-9]+ 匹配的value

a = re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]+)","abc12345daf@34").groupdict() #(?P<XXX>) 是语法 xxx 是KEY
print(a['id'])
print(a['name'])



#替换
print(re.sub("[0-9]+","|","abc12de3f45GH"))

print(re.sub("[0-9]+","|","abc12de3f45GH",count=2)) #count=2 替换前两个


# '(...)' 分组匹配,
print(re.search("(abc){2}a(123|456)c", "abcabca456c").group()) #abc匹配两次,匹配一个a,匹配123或者456,匹配一个c,结果 abcabca456c

# '|' 匹配|左或|右的字符
print(re.search("(123|456)","c456b123a").group()) #匹配到456;123和456同时匹配字符串,谁先匹配到输出谁; 而不是123匹配所有字符串,然后456在匹配所有字符串


#S(DOTALL): 点任意匹配模式,改变'.'的行为,flags=re.S
print(re.search(r".+"," abc e ee")) #匹配到abc
print(re.search(r".+"," abc e ee",flags=re.S)) #匹配到 abc e ee


#匹配反斜杠
string = '38'
m = re.search('(d+)\\', string) #d 表示数字,+多个;\\ 字符串转义后是\,然后再正则转义后是

if m is not None:
print( m.group(1)) # 结果为:3

n = re.search(r'(d+)\', string) #不转义特殊字符,直接进行正则转义是

if n is not None:
print(n)
print(n.group(1)) # 结果为:3


#匹配反斜杠解析:
(1)、python自身处理字符串时,反斜杠是用于转义字符
(2)、正则表达式也使用反斜杠来转义字符


最常用的匹配语法:
re.match 从头开始匹配
re.search 匹配包含
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符当做列表分隔符
re.sub 匹配字符并替换


参考:
https://www.cnblogs.com/alex3714/articles/5161349.html
https://blog.csdn.net/jinixin/article/details/56705284
https://www.cnblogs.com/wangyongbin/p/4253805.html


原文地址:https://www.cnblogs.com/lighthouse/p/9597374.html