首頁  >  文章  >  後端開發  >  python正規表示式中re模組的使用方法有哪些? re模組用法介紹

python正規表示式中re模組的使用方法有哪些? re模組用法介紹

不言
不言原創
2018-09-15 14:15:443046瀏覽

本篇文章帶給大家的內容是關於python正規表示式中re模組的使用方法有哪些? re模組用法介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

正規是處理字串最常用的方法,我們編碼中到處可見正規的身影。

正規大同小異,python 中的正規則與其他語言相比略有差異:

1、替換字串時,替換的字串可以是一個函數

2 、split 函數可以指定分割次數,這會導致有個坑

3、前項界定的表達式必須定長

#下面詳細描述下re模組的使用方法,其實,注意上面提到的三點差異就好

1、match

說明:

re.match 嘗試從字串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就回傳None。

語法:

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

flags為可選標識,多個標識可以透過位元或(|) 來指定。如re.I | re.M 被設定成I 和M 標識:

修飾符

描述

#re.I

使匹配對大小寫不敏感

#re.L

做本地化識別(locale-aware)匹配

re.M

#多行匹配,影響^ 和$

re.S

#使. 符合包含換行在內的所有字元

re.U

根據Unicode字元集解析字元。這個標誌影響\w, \W, \b, \B.

#re.X

這個標誌透過給予你更靈活的格式以便你將正規表示式寫得更易於理解。

匹配成功re.match方法傳回一個符合的對象,可以使用group(num) 或 groups() 來匹配物件函數來取得匹配表達式。 group() 或 group(0),傳回整個正規表示式的符合結果。

範例:

s= 'abc123abc'
print(re.match(&#39;[a-z]+&#39;, s))           # <_sre.SRE_Match object; span=(0, 3), match=&#39;abc&#39;>
print(re.match(&#39;[a-z]+&#39;, s).group(0))      # abc
print(re.match(&#39;[\d]+&#39;, s))            # None
print(re.match(&#39;[A-Z]+&#39;, s, re.I).group(0))   # abc
print(re.match(&#39;[a-z]+&#39;, s).span())       # (0, 3)

2、search

說明:

re.search 掃描整個字符串並傳回第一個成功的匹配。

語法:

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

符合成功re.search方法傳回一個符合的對象,否則傳回None。可以使用group(num) 或 groups() 來匹配物件函數來取得匹配表達式。

範例:

s = &#39;abc123abc&#39;
print(re.search(&#39;[a-z]+&#39;, s).group())  # abc
print(re.search(&#39;[a-z]+&#39;, s).span())   # (0, 3)
print(re.search(&#39;[\d]+&#39;, s).group())   # 123
print(re.search(&#39;[\d]+&#39;, s).span())    # (3, 6)
print(re.search(&#39;xyz&#39;, s))         # None

groupdict

groupdict 傳回符合到的所有命名子群組的字典。

print(re.search(&#39;[a-z]+&#39;, s).groupdict())          # {}
print(re.search(&#39;(?P<letter>[a-z]+)(?P<num>\d+)&#39;, s).groupdict())  # {&#39;num&#39;: &#39;123&#39;, &#39;letter&#39;: &#39;abc&#39;}

3、sub 和 subn

說明:

re.sub用於取代字串中的符合項目。

re.subn傳回一個元組,包含替換後的字串及替換次數。

語法:

sub(pattern, repl, string, count=0, flags=0)

repl: 替換的字串,也可為一個函數。

count: 模式匹配後替換的最大次數,預設為 0 表示替換所有的匹配。

範例:

s = &#39;abc123abc&#39;
print(re.sub(&#39;[\d]+&#39;, &#39;数字&#39;, s))       # abc数字abc
print(re.sub(&#39;[a-z]+&#39;, &#39;字母&#39;, s, 1))   # 字母123abc
# 将匹配的数字乘以 2
def double(matched):
    value = int(matched.group(&#39;value&#39;))
    return str(value * 2)
# repl是一个函数
print(re.sub(&#39;(?P<value>\d+)&#39;, double, s))  # abc246abc
print(re.subn(&#39;[\d]+&#39;, &#39;数字&#39;, s))        # (&#39;abc数字abc&#39;, 1)
print(re.subn(&#39;[a-z]+&#39;, &#39;字母&#39;, s,))      # (&#39;字母123字母&#39;, 2)
print(re.subn(&#39;[a-z]+&#39;, &#39;字母&#39;, s, 1))     # (&#39;字母123字母&#39;, 1)

4、compile

說明:

re.compile 用於編譯正規表示式,產生一個正規表示式(Pattern)對象,供match() 和search() 這兩個函數使用。

語法:

compile(pattern, flags=0)

#範例:

s = &#39;abc123abc&#39;
p = re.compile(&#39;[\d]+&#39;)
print(p.match(s, 4, 5).group(0))    # 2 从位置4开始匹配到位置5
print(p.search(s).group(0))         # 123

##5、findall

說明:

re.findall 在字串中尋找正規表示式所符合的所有子字串,並傳回一個列表,如果沒有找到符合的,則傳回空列表。

語法:

findall(pattern, string, flags=0)

範例:

s = &#39;abc123abc&#39;
print(re.findall(&#39;[a-z]+&#39;, s))  # [&#39;abc&#39;, &#39;abc&#39;]
print(re.findall(&#39;[h-n]+&#39;, s))  # []

#6、 finditer

說明:

finditer和findall 類似,在字串中尋找正規表示式所符合的所有子字串,並把它們當作一個迭代器傳回。

語法:

finditer(pattern, string, flags=0)

範例:

s = &#39;abc123def&#39;
it = re.finditer(&#39;[a-z]+&#39;, s)
for match in it:    print(match.group())

#7、 split

說明:

re.split 方法依照能夠匹配的子字串將字串分割後傳回清單。

語法:

split(pattern, string, maxsplit=0, flags=0)

maxsplit:分隔次數,maxsplit=1 分隔一次,預設為0,不限制次數。

範例:

print(re.split(&#39;a&#39;, &#39;1A1a2A3&#39;, re.I))           # [&#39;1A1&#39;, &#39;2A3&#39;]# 输出结果并未能区分大小写,这是因为re.split(pattern,string,maxsplit, flags)默认是四个参数,当我们传入的三个参数的时候,系统会默认re.I是第三个参数,所以就没起作用。# 如果想让这里的re.I起作用,写成flags=re.I即可。
print(re.split(&#39;a&#39;, &#39;1A1a2A3&#39;, flags=re.I))     # [&#39;1&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;]

8、escape

說明:

re.escape對字串裡面的特殊字串進行轉義。

語法:

escape(pattern)

範例:

print(re.escape(&#39;www.dxy.cn&#39;))  # www\.dxy\.cn

9、正規

#「(?P8a11bc632ea32a57b3e3693c7987c420…)」:分組,並將其命名為8a11bc632ea32a57b3e3693c7987c420。

「(?P=name)」:引用別名為8a11bc632ea32a57b3e3693c7987c420的分組所匹配到的字串。

10、前項(否定)界定中的特殊

正則中常用的前項界定(?<=exp)和前項否定界定(?
(?<=aaa)   # 正确
(?<=aaa|bbb) # 正确
(?<=aaa|bb) # 错误
(?<=\d+)   # 错误
(?<=\d{3})  # 正确

相關推薦:

python中logging模組有什麼用? logging模組的用法介紹

python模組之re正規表示式詳細介紹

以上是python正規表示式中re模組的使用方法有哪些? re模組用法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn