亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

正則-re如何在python中使用

發布時間:2021-01-26 16:25:38 來源:億速云 閱讀:169 作者:Leah 欄目:開發技術

正則-re如何在python中使用?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

修飾符

?re.I 使匹配對大小寫不敏感
?re.L 做本地化識別匹配
?re.M 多行匹配,影響^和$
?re.S 使.匹配包括換行在內的所有字符
?re.U 根據Unicode字符集解析字符.這個標志影響\w \W \b \B
?re.X 該標志通過給予你更靈活的格式以便你將正則表達式寫的更易于理解.

模式

?^ 匹配字符串開頭
?$ 匹配字符串結尾
?. 匹配人以字符,除了換行符號.當re.DOTAALL標記被指定時,則可以匹配包括換行符的任意字符.
?[...] 用來表示一組字符,單獨列出:[amk]匹配a,m或k
?[^...] 不在[]中的字符:[^amk]匹配除amk之外的字符
?re* 匹配0個或多個的表達式
?re+ 匹配1個或多個的表達式
?re? 匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式.
?re{n} 精準匹配n個前面表達式
?re{n,} 匹配大于等于n個前面表達式
?re{n,m} 匹配n到m個前面的表達式定義的片段,貪婪方式
?a|b 匹配a或b
?(re) 對正則表達式分組,并記住匹配的文本
?(?imx) 正則表達式包含三種可選標志,imx,只影響括號中的區域.
?(?-imx) 正則表達式關閉imx可選標志,只影響括號中的區域.
?(?:re) 類似(...)但不表示一個組
?(?imx:re) 在括號中使用imx可選標志
?(?-imx:re) 在括號中不是用imx可選標志
?(?#...) 注釋
?(?=re) 前向肯定界定符.如果所含正則表達式,以...表示,在當前位置成功匹配時成功,否則失敗.但一旦所含表達式已經嘗試,匹配引擎根本沒有提高,模式的剩余部分還要嘗試界定符右邊.
?(?!re) 前向否定界定符.與肯定界定符相反;當所含的表達式不能在字符串當前位置匹配成功時成功.
?(?>re) 匹配的獨立模式,省去回朔.
?\w 匹配字符數字以及下劃線
?\W 匹配非字母數字下劃線
?\s 匹配任意空白字符,等價于[\t\n\r\f]
?\S 匹配任意非空白字符
?\d 匹配任意數字
?\D 匹配任意非數字
?\A 匹配字符串開始
?\Z 匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串.
?\z 匹配字符串結束
?\G 匹配最后匹配完成的位置
?\b 匹配一個單詞邊界,也就是指單詞和空格之間的位置
?\B 匹配非單詞邊界
?\n \t 匹配一個換行符,一個制表符
?\1...\9 匹配第n個分組的內容

上面這些呢,是我們會用到的一些模式,這里面絕大部分都是應該熟記于心的。

接下來我們看re的一些方法:

re.compile

這個方法會生成一個正則對象,他的第一個參數是正則字符串,第二個參數是修飾符,就是 re.I, re.S 這些。

生成的這個正則對象呢,它還有一些方法,比如match、findall、finditer、search等等,這些方法的用法請往下看。

re.match

match方法是從給定字符串的開頭開始進行匹配,并且只匹配一次。也就是說如果字符串和正則的第一個字母就對不上那就匹配失敗了。

ta的參數是pettern,string,flags

?pettern 就是正則字符串,如果是通過re.compile方法生成的正則對象.match來調用的話,就不需要這個參數了,因為正則對象本身就代表了一個正則匹配模式。

?string 就是要進行匹配的目標字符串

?flags 就是正則的修飾符,比如 re.I

match 如果匹配失敗返回None,匹配懲罰返回的則是一個match對象。

match對象有一些方法,比較常用的有:span、group、groups等等
?span 方法返回的一個二元組,分別表示匹配字符串在目標字符串中的起始下標和結束下標
?group 函數有一個int類型的參數,參數為0表示返回正則匹配的字符串,參數為1返回正則中第一個組匹配的內容,2返回第二組的內容一次類推
?groups 函數是所有group函數結果組成一個元組。

re.search

search 函數和 match 函數是類似的,區別在于match方法是只在目標函數開頭匹配一次;search函數是在整個目標函數上匹配一次,一次匹配成功后不再進行匹配。

同樣search方法返回的也是一個match對象,用法和match方法返回的結果一樣。

re.split

split 函數是用來分割字符串的一個函數。它的功能就是根據匹配的字符串對目標字符串進行分割,返回的結果是一個列表。

需要注意的是,如果正則中有組,組內的字符在結果列表中也會保留,不是組內的字符在結果列表中不會被保留。什么意思呢?通過一個例子來看一下:

st = 'www.baidu.com www.taobao.com'
result = re.split('bai(du)', st)
print(result)

結果:

['www.', 'du', '.com www.taobao.com']

可以看到,字符串‘du'是被括號括起來的,所以在結果中也有'du'這個元素,而'bai'沒有被括號括起來,在結果中就不會有‘bai'這個元素。

re.findall

這個函數是我在爬蟲項目中用的最多的一個函數了,它可以把所有匹配的結果以列表的形式返回,而不是像match和search一樣只匹配一個結果。我們來試一下:

st = 'www.baidu.com www.taobao.com'
result = re.findall(r'www\.(\w*)\.(com)', st)
print(result)
[('baidu', 'com'), ('taobao', 'com')]
re.finditer

這個函數和findall的功能一樣。不同之處在于這個函數返回的結果是一個生成器,而生成器中的每一項是一個match對象,我們一起來看一下:

st = 'www.baidu.com www.taobao.com'
result = re.finditer(r'www\.(\w*)\.(com)', st)
print(result.__next__().group(0, 1, 2))
print(next(result).groups(2))
('www.baidu.com', 'baidu', 'com')
('taobao', 'com')
re.sub

這個函數是用來替換字符串的。可以將匹配的字符串替換成指定的字符串,我們來看一下:

st = 'www.111.com www.222.com'
result = re.sub(r'\d+', 'OK', st)
print(result)

結果:

www.OK.com www.OK.com

我們的第二個參數除了可以是一個給定的字符串還可以是一個函數:

def toOK(matched):
  value = matched.group()
  return str(int(value)*2)
st = 'www.111.com www.222.com'
result = re.sub(r'\d+', toOK, st)
print(result)

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沁阳市| 大埔县| 聂荣县| 庆元县| 兴业县| 开江县| 铜梁县| 肥城市| 吉水县| 清河县| 阳江市| 张家口市| 神农架林区| 枣强县| 阿坝| 秭归县| 酉阳| 孝感市| 精河县| 周宁县| 蕲春县| 岳阳市| 和静县| 富阳市| 叙永县| 临猗县| 延寿县| 姜堰市| 舟山市| 台湾省| 泾阳县| 信阳市| 鄂托克前旗| 顺平县| 岑巩县| 吴川市| 屯留县| 麻江县| 武强县| 左贡县| 青州市|