正規表示式 python re正則模組

2022-06-07 11:54:14 字數 4440 閱讀 8896

python內建模組連線:

re \d \w \s 等解釋

快速使用

# 多行匹配

re.dotall

# 查詢

findall_ = re.compile('').findall(xml_line)[0] # 返回列表

match_ = re.compile('').match(xml_line) # 返回第乙個,不搜尋新行,match_.group()返回

search_ = re.compile('').search(xml_line) # 返回第乙個,搜尋整個字串,group()返回

# search和group(0),group(1)…的方法

a = 「123abc456」

print re.search("([0-9])([a-z])([0-9])",a).group(0) #123abc456,返回整體

print re.search("([0-9])([a-z])([0-9])",a).group(1) #123

print re.search("([0-9])([a-z])([0-9])",a).group(2) #abc

print re.search("([0-9])([a-z])([0-9])",a).group(3) #456

#m.group(n) 返回第n組括號匹配的字元。而m.group() == m.group(0) == 所有匹配的字元,與括號無關,這個是api規定的。

# 替換

# compile()和sub()結合的用法

s = "hello 1234, goodbye, 235"

pat = r'\d+'

m = re.compile(pat).sub('666',s) # hello 666, goodbye, 666

# 貪婪和非貪婪

s="this is a number 234-235-22-423"

r=re.match(".+(\d+-\d+-\d+-\d+)",s) # r.group(1) ,'4-235-22-423'

r=re.match(".+?(\d+-\d+-\d+-\d+)",s) # r.group(1) ,'234-235-22-423'

# 正規表示式模式中使用到通配字,那它在從左到右的順序求值時,會盡量「抓取」滿足匹配最長字串,

# 在我們上面的例子裡面,「.+」會從字元 串的啟始處抓取滿足模式的最長字元,其中包括我們想得到的第乙個整型欄位的中的大部分,「\d+」只需一位字元就可以匹配,所以它匹配了數字「4」,而「.+」則匹配了從字串起始到這個第一位數字4之前的所有字元。

# 解決方式:非貪婪操作符「?」,這個操作符可以用在"*","+","?"的後面,要求正則匹配的越少越好。

re.match(r"aa(\d+)","aa2343ddd").group(1) # '2343'

re.match(r"aa(\d+?)","aa2343ddd").group(1) # '2'

re.match(r"aa(\d+)ddd","aa2343ddd").group(1) # '2343'

re.match(r"aa(\d+?)ddd","aa2343ddd").group(1) #'2343'

1.使用re.compile

# 使用

result = ...

reg_exp = re.compile(date + '[\s\s]*')

matches_list = reg_exp.findall(result)

# 說明

re.compile(pattern[, flags])

引數:pattern : 乙個字串形式的正規表示式

flags : 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體引數為:

re.i 忽略大小寫

re.l 表示特殊字符集 \w, \w, \b, \b, \s, \s 依賴於當前環境

re.m 多行模式

re.s 即為 . 並且包括換行符在內的任意字元(. 不包括換行符)

re.u 表示特殊字符集 \w, \w, \b, \b, \d, \d, \s, \s 依賴於 unicode 字元屬性資料庫

re.x 為了增加可讀性,忽略空格和 # 後面的注釋

2.search 分組 group

# python中的search的group(0),group(1)…的方法

a = 「123abc456」

print re.search("([0-9])([a-z])([0-9])",a).group(0) #123abc456,返回整體

print re.search("([0-9])([a-z])([0-9])",a).group(1) #123

print re.search("([0-9])([a-z])([0-9])",a).group(2) #abc

print re.search("([0-9])([a-z])([0-9])",a).group(3) #456

#m.group(n) 返回第n組括號匹配的字元。而m.group() == m.group(0) == 所有匹配的字元,與括號無關,這個是api規定的。

3.match的 group

ln =''''''

starttag = re.match("^<(\w+?) .*$", ln).group(1) # status

starttag = re.match("^<(\w+?) .*$", ln).group() #

4.findall 取消分組

# 取消分組 ,match好像不生效

img = 9.1800.1239.zip

reg_exp = re.compile('.(\d+).zip') # [1239]

reg_exp = re.compile('.(?:\d+).zip') # ['.1239.zip']

res = reg_exp.findall(img )

# 返回兩組匹配結果,每組有自己的分組

reg_exp = re.compile(r'version:\s(0x\w+)\nusage:\s+\d\s-\sit\'s\s(\w+)')

matches_list = reg_exp.findall(rru_version_str) # [('0xdec76a31', 'active'), ('0xef7eebd7', 'passive')]

version_dic =

5.sub()使用

# 1. compile()和sub()結合的用法

s = "hello 1234, goodbye, 235"

pat = r'\d+'

m = re.compile(pat).sub('666',s) # hello 666, goodbye, 666

# 2. 直接使用

re.sub('[^a-za-z0-9]', ' ', str) #替換str中的特殊字元為空格

6.split()使用

line = 'aaa bbb ccc;ddd   eee,fff'

# 單字元切割

re.split(r';',line) # ['aaa bbb ccc', 'ddd\teee,fff']

# 兩個字元以上切割需要放在 [ ] 中

re.split(r'[;,]',line) # ['aaa bbb ccc', 'ddd\teee', 'fff']

#所有空白字元切割

re.split(r'[;,\s]',line) # ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff']

# 使用括號捕獲分組,預設保留分割符

re.split(r'([;])',line) # ['aaa bbb ccc', ';', 'ddd\teee,fff']

# 不想保留分隔符,以(?:...)的形式指定

re.split(r'(?:[;])',line) # ['aaa bbb ccc', 'ddd\teee,fff']

7. escape(pattern)

可以對字串中所有可能被解釋為正則運算子的字元進行轉義的應用函式。

如果字串很長且包含很多特殊技字元,而你又不想輸入一大堆反斜槓,或者字串來自於使用者(比如通過raw_input函式獲取輸入的內容),且要用作正規表示式的一部分的時候,可以使用這個函式。

舉例說明:

re.escape('www.python.org') # 'www\\.python\\.org'

re.findall(re.escape('w.py'),"jw.pyji w.py.f") # ['w.py', 'w.py']

這裡的re.escape(『w.py』)作為了函式re.findall函式的正規表示式部分。

Python re 正規表示式

import re 匯入re模 result re.match 正規表示式,要匹配的字串 使用match 方法進行匹配操作 result.group 使用group 方法提取資料 案例 匹配變數名是否符合識別符號命名規則 res re.match a za z w name 123 print re...

正規表示式 python re

字元功能 或 分組 num 引用分組num匹配到的字串 p 分組起別名 p name 引用別名為name分組匹配到的字串 示例import re label res re.match r w w label print res.group www.itcast.cn h1 html import r...

python re 正規表示式

1 re.match str id s paragraph.text re.match 表示從變數 paragraph.text 所代表的 字串 的開始匹配模式 str id s 模式 str id s 表示 以id 某個數字 開始,s 表示0個或者多個空白符。表示結尾。2 searchobj re...