日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python3 正则表达式模块re相关

發(fā)布時間:2025/3/15 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3 正则表达式模块re相关 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
# -*- coding:utf-8 -*- # Author: Evan Mi import re """ '.' 默認匹配除\n之外的任意一個字符,若指定flag DOTALL,則匹配任意字符,包括換行 '^' 匹配字符開頭,若指定flags MULTILINE,這種也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE) '$' 匹配字符結尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以 '*' 匹配*號前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 結果為['abb', 'ab', 'a'] '+' 匹配前一個字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 結果['ab', 'abb'] '?' 匹配前一個字符1次或0次 '{m}' 匹配前一個字符m次 '{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|456)c", "abcabca456c").group() 結果 abcabca456c'\A' 只從字符開頭匹配,re.search("\Aabc","alexabc") 是匹配不到的 '\Z' 匹配字符結尾,同$ '\d' 匹配數(shù)字0-9 '\D' 匹配非數(shù)字 '\w' 匹配[A-Za-z0-9] '\W' 匹配非[A-Za-z0-9] 's' 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果 '\t' '(?P<name>...)' 分組匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})", "371481199306143242").groupdict("city")結果{'province': '3714', 'city': '81', 'birthday': '1993'}最常用的匹配語法 re.match 從頭開始匹配 re.search 匹配包含 re.findall 把所有匹配到的字符放到以列表中的元素返回string="abcdefg acbdgef abcdgfe cadbgfe"regex=re.compile("((\w+)\s+\w+)") print(regex.findall(string)) #輸出:[('abcdefg acbdgef', 'abcdefg'), ('abcdgfe cadbgfe', 'abcdgfe')] 解釋一下為什么這樣的結果?很簡單,當我們忽略括號,對整個字符串進行匹配的時候,要求是一到多個字母空格一到多個字母; 所以有兩個結果'abcdefg acbdgef'和'abcdgfe cadbgfe',但是我們是有括號的,所以給結果也加上括號,結果就變成了 '((abcdefg) acbdgef)'和'((abcdgfe) cadbgfe)',然而findall要返回括號里面的內容,而我們這里匹配了兩次,每次有兩個括號, 所以只好把每次的兩個括號放在一個tuple中來區(qū)別哪此匹配的,tuple中的內容就是兩個括號中的值;所以結果為: [('abcdefg acbdgef', 'abcdefg'), ('abcdgfe cadbgfe', 'abcdgfe')]regex1=re.compile("(\w+)\s+\w+") print(regex1.findall(string)) #輸出:['abcdefg', 'abcdgfe'] 解釋一下為什么這樣的結果?很簡單,當我們忽略括號,對整個字符串進行匹配的時候,要求是一到多個字母空格一到多個字母; 所以有兩個結果'abcdefg acbdgef'和'abcdgfe cadbgfe',但是我們是有括號的,所以給結果也加上括號,結果就變成了 '(abcdefg) acbdgef'和'(abcdgfe) cadbgfe',然而findall只返回括號里面的內容,所以結果是 ['abcdefg','abcdgfe']regex2=re.compile("\w+\s+\w+") print(regex2.findall(string)) #輸出:['abcdefg acbdgef', 'abcdgfe cadbgfe'] 解釋一下,這個沒有括號了,兩次匹配到的結果就是'abcdefg acbdgef'和'abcdgfe cadbgfe';沒有括號,就在最外層默認加個括號, 變成了'(abcdefg acbdgef)'和'(abcdgfe cadbgfe)';所以結果是 ['abcdefg acbdgef', 'abcdgfe cadbgfe'];findall()返回的是括號所匹配到的結果(如regex1),多個括號就會返回多個括號分別匹配到的結果(如regex), 如果沒有括號就返回就返回整條語句所匹配到的結果(如regex2)。所以在提取數(shù)據(jù)的時候就需要注意這個坑print(re.sub('(.)\\1*', "2", test)) \1是代表第一個括號中的值 print(re.findall('(.)\\1*', test)) re.split 以匹配到的字符當做列表分隔符 re.sub 匹配字符并替換 """

總結

以上是生活随笔為你收集整理的python3 正则表达式模块re相关的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。