1. 程式人生 > >re--正則表達式

re--正則表達式

info 找到 brush 提高 mpi post 忽略 http verbose

常用表達式規則:

. 默認匹配除\n之外的任意一個字符,一個點代表一個字符,指定flag DOTA L L則匹配任意字符,包括換行
^

匹配字符串開頭,若指定flag MULTILINE忽略換行符,也可匹配上(r‘^a‘,‘\nabc\ndef‘)

re.starch(‘^a‘,‘abcd‘)等效re.match(‘a‘,‘abcd‘)

$

匹配字符串結尾,指定flag MULTILINE,也可匹配re.search(‘a.$‘,‘a1\na2\na3\n)

re.match(‘a$‘,‘a‘)只能匹配a,即以a開頭並以a結尾,同一個a,也就只能匹配一個a

* 匹配*號前一個字符0至多次,re.search(‘a*‘,‘aaabbaaaa‘)匹配到‘aaa‘
+ 匹配+號前一個字符1至多次,re.search(‘ba+‘,bbbbbabab‘)匹配到‘baba‘
? 匹配?號前一個字符0或1次,re.search(‘ba?‘,‘absba‘)匹配到‘ba‘
{m} 匹配前一個字符m次,re.seatch(‘b{3}‘,‘dddaaabbbb‘)匹配到‘bbb‘
{n,m} 匹配前一個字符n到m次,re.findall(‘ab{1,2}‘,‘ababvab‘)匹配到[‘abab‘,‘ab‘],先匹配m個,m個配匹完後再匹配m-1個,直到m=n。即先最大化匹配
| 匹配|號左或右的字符,re.search(‘abc|Cd‘,‘abcdef‘)匹配到‘abc‘,‘abCd‘則匹配到Cd,要配匹到abcd或abCd則寫成abcd|abCd,也可寫成‘ab[c|C]d‘
(....) 分組匹配,re.search("(abc){2}a(123|45)","abcabca456c").group()則配匹abcabca45或abcabca1245,用groups()則返回(‘abc‘, ‘45‘)
[0-9] b表示0-9任意數字,[a-b],[A-B]
\A 只從字符開頭匹配,同^,類似match
\Z 匹配字符串結尾,同$
\d s數字0-9,同[0-9] ,\d+配匹貪婪匹配,即匹配最多如re.search(‘\d+‘,‘123sdf‘)配匹到123而非1
\D 配匹非數字
\w 匹配[0-9A-Za-z],即除特殊字符
\W 匹配非[0-9A-Za-z],即特殊字符
\s 匹配配匹空白字符,\t,\n,\r
(?P<name>) 分組匹配,分組並指定名稱返回re.search("(?P<province>[0-9]{4})(?P<city>\d{3})",‘1236527‘).group()返回1236527,groups()返回(‘1236‘, ‘527‘),groupdict()返回字典{‘province‘: ‘1236‘, ‘city‘: ‘527‘}

re匹配語法:

  • re.match從頭開始匹配,第一個值開始匹配,只匹配一次,返回一對象,對象可用group()取值
  • re.search全局匹配,找到就返回,只匹配一次。返回一對象,對象可用group()取值
  • re.findall全局匹配,把所有匹配到的字符放到一個列表中返回

例:

s=‘123abc1234def‘
match_res=re.match(‘[0-9]‘,s)
if match_res:
    print(match_res.group())
  • re.split以匹配到的字符當作列表分隔符

例:

s=‘a123b456c789ddd#sdf-fsd‘
print(re.split(‘\d+|#|-‘,s,maxsplit=None))
#maxsplit指定split多少次

技術分享圖片

  • re.sub匹配字符並替換

例:

s=‘a123b456c789ddd#sdf-fsd‘
print(re.sub(‘\d+‘,‘__‘,s))

技術分享圖片

例:提換指定個數

s=‘a123b456c789ddd#sdf-fsd‘
#只替換一個
print(re.sub(‘\d+‘,‘__‘,s,count=1))

技術分享圖片

  • re.fullmatch全部匹配,整個字符串配匹成功就返回re object,否則返回None
re.fullmatch(‘\w+@\w+\.(com|cn|edu)‘,"[email protected]").group()

技術分享圖片

  • re.compile先將規則進行編譯,再用對象去配匹。對於同一個規則匹配多次,速度會提高

例:

pattern=re.compile(‘\w+@\w+\.(com|cn|edu)‘)
pattern.fullmatch(‘[email protected]‘).group()

技術分享圖片

標識符

  • re.I(re.IGNORECASE)忽略大小寫
  • re.M(MULTILINE)多行模式,改變‘^‘和‘$‘的行為
  • re.S(DOTALL)改變‘.‘的行為,匹配包括換行符
  • re.X(VERBOSE)可以給你的表達式寫註釋,使其更可讀

re--正則表達式