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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

re 模块

發布時間:2024/9/3 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 re 模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

常用的表達式規則

'.' 默認匹配除\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<name>...)' 分組匹配
>>>re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city")
>>>a.groupdict() {'province': '3714', 'city': '81', 'birthday': '1993'}

re的匹配語法有以下幾種

  • re.match 從頭開始匹配
  • re.search 匹配包含
  • re.findall 把所有匹配到的字符放到以列表中的元素返回
  • re.split 以匹配到的字符當做列表分隔符
  • re.sub 匹配字符并替換
  • re.fullmatch 全部匹配

re.compile(pattern, flags=0)

將正則表達式模式編譯為正則表達式對象,該對象可用于使用match(),search()和其他方法進行匹配,如下所述

The sequenceprog = re.compile(pattern) result = prog.match(string) is equivalent toresult = re.match(pattern, string)

如果在單個程序中多次使用表達式,則使用re.compile()并保存生成的正則表達式對象以便重用將會更有效。

re.match(pattern, string, flags=0)

從起始位置開始根據模型去字符串中匹配指定內容,匹配單個

  • pattern 正則表達式
  • string 要匹配的字符串
  • flags 標志位,用于控制正則表達式的匹配方式

Flags標志符

  • re.I(re.IGNORECASE): 忽略大小寫(括號內是完整寫法,下同)
  • M(MULTILINE): 多行模式,改變'^'和'$'的行為
  • S(DOTALL): 改變'.'的行為,make the '.' special character match any character at all, including a newline; without this flag, '.' will match anything except a newline.
  • X(re.VERBOSE) 可以給你的表達式寫注釋,使其更可讀,下面這2個意思一樣
>>> re.search('a','Alex') >>> re.search('a','Alex',re.I) <_sre.SRE_Match object; span=(0, 1), match='A'> >>> re.search('foo.$','foo1\nfoo2\n') <_sre.SRE_Match object; span=(5, 9), match='foo2'> >>> re.search('foo.$','foo1\nfoo2\n',re.M) <_sre.SRE_Match object; span=(0, 4), match='foo1'>>>> re.search('.','\n') >>> re.search('.','\n',re.S) <_sre.SRE_Match object; span=(0, 1), match='\n'>>>> a = re.compile(r"""\d + # the integral part ... \. # the decimal point ... \d * # some fractional digits""", ... re.X) >>> a.search('3.23') <_sre.SRE_Match object; span=(0, 4), match='3.23'>

re.search(pattern, string, flags=0)

根據模型去字符串中匹配指定內容,匹配單個

1 import re 2 obj = re.search('\d+', 'u123uu888asf') 3 if obj: 4 print obj.group()

re.findall(pattern, string, flags=0)

?match and search均用于匹配單值,即:只能匹配字符串中的一個,如果想要匹配到字符串中所有符合條件的元素,則需要使用 findall。

1 import re 2 obj = re.findall('\d+', 'fa123uu888asf') 3 print obj

?re.sub(pattern, repl, string, count=0, flags=0)

用于替換匹配的字符串

>>> s = '21fasdf32' >>> re.sub('\d+','_',s) '_fasdf_' >>> re.sub('\d+','_',age) 'lemi_kevin_alex_|python\\linux' >>> re.sub('\d+','_',age,count=2) 'lemi_kevin_alex33|python\\linux' >>> s='9-2*5/3+7/3*99/4*2998+10*568/14'

相比于str.replace功能更加強大?

?re.split(pattern, string, maxsplit=0, flags=0)

>>> age = 'lemi21kevin22alex33' >>> re.split('\d+',age) ['lemi', 'kevin', 'alex', ''] >>> age = 'lemi21kevin22alex33|python\linux' >>> re.split('\|',age) ['lemi21kevin22alex33', 'python\\linux'] >>> re.split('\\\\',age) ['lemi21kevin22alex33|python', 'linux'] >>> re.split('[-\*/+]',s) ['9', '2', '5', '3', '7', '3', '99', '4', '2998', '10', '568', '14'] >>> re.split('[-\*/+]',s,maxsplit=2) ['9', '2', '5/3+7/3*99/4*2998+10*568/14']

?re.fullmatch(pattern, string, flags=0)

整個字符串匹配成功就返回re object, 否則返回None

>>> pattern = re.compile('\w+@\w+\.(cn|com|org)') >>> pattern.fullmatch('fadewalk@163.com').group() 'fadewalk@163.com'

總結

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

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