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".+","\nabc\ne ee")) #匹配到abc
print(re.search(r".+","\nabc\ne ee",flags=re.S)) #匹配到\nabc\ne ee
#匹配反斜杠\
string = '3\8'
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