pythonre模塊
㈠ python re模塊中 (P) (P=name) 及 \g<name> 三者的使用區別
題主你好,
沒有單獨的(?P)這種用法, 猜測應該指的是(?P<name>), (?P=name),g<name>這三者的用法.
首先說(?P<name>),它其實和單個圓括弧,(),本質上一樣, 只不過在後面引用分組中多了一種引用方法:
(123)對於這個分組, 你引用時只能是1(這種也是我們最常用的分組與引用的方法),見例子:
=====
希望可以幫到題主, 歡迎追問.
㈡ 強烈推薦!Python 這個寶藏庫 re 正則匹配
Python 的 re 模塊(Regular Expression 正則表達式)提供各種正則表達式的匹配操作。
在文本解析、復雜字元串分析和信息提取時是一個非常有用的工具 ,下面總結了 re 模塊的常用方法。
d 匹配所有的十進制數字 0-9
D 匹配所有的非數字,包含下劃線
s 匹配所有空白字元(空格、TAB等)
S 匹配所有非空白字元,包含下劃線
w 匹配所有字母、漢字、數字 a-z A-Z 0-9
W 匹配所有非字母、漢字、數字,包含下劃線
備注跡凳:符號.* 貪婪,符號.*? 非貪婪
[abc]:能匹配其中的單個字元
[a-z0-9]:能匹配指定范圍的字元,可取反(在最前面加入^)
[2-9] [1-3]:能夠做組合匹配
4.{ }:用於標記前面的字元出現的頻率,有如下情況:
{n,m}:代表前面字元最少出現n次,最多出現m次
{n,}:代表前面字元最少出現n次,最多不受限制
{,m}:代表前面字元最多出現n次,最少不受限制
{n}:前面的字元必須出現n次
字元串中有反斜杠的,需要對反斜杠做轉義
():分組字元,可以為匹配到的內容分組,快速獲取到分組中的數據 在正則裡面 "()" 代表的是分組的意思,一個括弧代表一個分組,你只能匹配到 "()" 中的內容。
group:用於查看指定分組匹配到的內容
groups:返回一個元組,組內為所有匹配到的內容
groupdict:返回一個字典,包含分組的鍵值對,需要為分組命名
作用:可以將字元串匹配正則表達式的部分割開並返回一個列表
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 字元屬性資料庫
在 Python 中使用正耐孫則表達式之前,先使用以下命令導入 re 模塊
例如:
『(d)(a)1』 表示:匹配第一是數字,第二是字元a,第三 1 必須匹配第一個一樣的數字重復一次姿畝旅,也就是被引用一次。
如 「9a9」 被匹配,但 「9a8」 不會被匹配,因為第三位的 1 必須是 9 才可以。
『(d)(a)2』 表示:匹配第一個是一個數字,第二個是a,第三個 2 必須是第二組()中匹配一樣的。
如 「8aa」 被匹配,但 「8ab」,「7a7」 不會被匹配,第三位必須是第二組字元的復製版,也是就引用第二組正則的匹配內容。
㈢ Python常用的正則表達式處理函數詳解
正則表達式是一個特殊的字元序列,用於簡潔表達一組字元串特徵,檢查一個字元串是否與某種模式匹配,使用起來十分方便。
在Python中,我們通過調用re庫來使用re模塊:
import re
下面介紹Python常用的正則表達式處理函數。
re.match函數
re.match 函數從字元串的起始位置匹配正則表達式,返回match對象,如果不是起始位置匹配成功的話,match()就返回None。
re.match(pattern, string, flags=0)
pattern:匹配的正則表達式。
string:待匹配的字元串。
flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。具體參數為:
re.I:忽略大小寫。
re.L:表示特殊字元集 w, W, , B, s, S 依賴於當前環境。
re.M:多行模式。
re.S:即 . ,並且包括換行符在內的任意字元(. 不包括換行符)。
re.U:表示特殊字元集 w, W, , B, d, D, s, S 依賴於 Unicode 字元屬性資料庫。
re.X:為了增加可讀性,忽略空格和 # 後面的注釋。
import re #從起始位置匹配 r1=re.match('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.match('def','abcdefghi') print(r2)運行結果:
其中,span表示匹配成功的整個子串的索引。
使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。
group(num):匹配的整個表達式的字元串,group() 可以一次輸入多個組號,這時它將返回一個包含那些組所對應值的元組。
groups():返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。
import re s='This is a demo' r1=re.match(r'(.*) is (.*)',s) r2=re.match(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())運行結果:
上述代碼中的(.*)和(.*?)表示正則表達式的貪婪匹配與非貪婪匹配。
re.search函數
re.search函數掃描整個字元串並返回第一個成功的匹配,如果匹配成功則返回match對象,否則返回None。
re.search(pattern, string, flags=0)
pattern:匹配的正則表達式。
string:待匹配的字元串。
flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。
import re #從起始位置匹配 r1=re.search('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.search('def','abcdefghi') print(r2)運行結果:
使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。
group(num=0):匹配的整個表達式的字元串,group() 可以一次輸入多個組號,這時它將返回一個包含那些組所對應值的元組。
groups():返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。
import re s='This is a demo' r1=re.search(r'(.*) is (.*)',s) r2=re.search(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())運行結果:
從上面不難發現re.match與re.search的區別:re.match只匹配字元串的起始位置,只要起始位置不符合正則表達式就匹配失敗,而re.search是匹配整個字元串,直到找到一個匹配為止。
re.compile 函數
compile 函數用於編譯正則表達式,生成一個正則表達式對象,供 match() 和 search() 這兩個函數使用。
re.compile(pattern[, flags])
pattern:一個字元串形式的正則表達式。
flags:可選,表示匹配模式,比如忽略大小寫,多行模式等。
import re #匹配數字 r=re.compile(r'd+') r1=r.match('This is a demo') r2=r.match('This is 111 and That is 222',0,27) r3=r.match('This is 111 and That is 222',8,27) print(r1) print(r2) print(r3)運行結果:
findall函數
搜索字元串,以列表形式返回正則表達式匹配的所有子串,如果沒有找到匹配的,則返回空列表。
需要注意的是,match 和 search 是匹配一次,而findall 匹配所有。
findall(string[, pos[, endpos]])
string:待匹配的字元串。
pos:可選參數,指定字元串的起始位置,默認為0。
endpos:可選參數,指定字元串的結束位置,默認為字元串的長度。
import re #匹配數字 r=re.compile(r'd+') r1=r.findall('This is a demo') r2=r.findall('This is 111 and That is 222',0,11) r3=r.findall('This is 111 and That is 222',0,27) print(r1) print(r2) print(r3)運行結果:
re.finditer函數
和 findall 類似,在字元串中找到正則表達式所匹配的所有子串,並把它們作為一個迭代器返回。
re.finditer(pattern, string, flags=0)
pattern:匹配的正則表達式。
string:待匹配的字元串。
flags:標志位,用於控制正則表達式的匹配方式,如是否區分大小寫,多行匹配等。
import re r=re.finditer(r'd+','This is 111 and That is 222') for i in r: print (i.group())運行結果:
re.split函數
將一個字元串按照正則表達式匹配的子串進行分割後,以列表形式返回。
re.split(pattern, string[, maxsplit=0, flags=0])
pattern:匹配的正則表達式。
string:待匹配的字元串。
maxsplit:分割次數,maxsplit=1分割一次,默認為0,不限次數。
flags:標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等。
import re r1=re.split('W+','This is 111 and That is 222') r2=re.split('W+','This is 111 and That is 222',maxsplit=1) r3=re.split('d+','This is 111 and That is 222') r4=re.split('d+','This is 111 and That is 222',maxsplit=1) print(r1) print(r2) print(r3) print(r4)運行結果:
re.sub函數
re.sub函數用於替換字元串中的匹配項。
re.sub(pattern, repl, string, count=0, flags=0)
pattern:正則中的模式字元串。
repl:替換的字元串,也可為一個函數。
string:要被查找替換的原始字元串。
count:模式匹配後替換的最大次數,默認0表示替換所有的匹配。
import re r='This is 111 and That is 222' # 刪除字元串中的數字 r1=re.sub(r'd+','',r) print(r1) # 刪除非數字的字元串 r2=re.sub(r'D','',r) print(r2)運行結果:
到此這篇關於Python常用的正則表達式處理函數詳解的文章就介紹到這了,希望大家以後多多支持!
㈣ python中re.compile函數的使用
python通過re模塊提供對正則表達式的支持。使用re的一般步驟是
1.先使用re.compile()函數,將正則表達式的字元串形式編譯成Pattern實例。
2.然後使用Pattern實例處理文本並獲得匹配結果(一個match實例),最後使用Match實例獲得信息,進行其他的操作。
舉一個簡單的例子,在尋找一個字元串中所有的英文字元:
import re
pattern = re.compile(『[a-zA-Z]')
result = pattern.findall('as3SiOP')
print result
㈤ Python 標准庫模塊 - re
re模塊被稱為正則表達式,其作用為,創建一個「規則表達式」,用於驗證和查找符合規則的文本,廣泛用於各種搜索引擎、賬戶密碼的驗證等。
預定義字元:
d:匹配所有的十進制數字0-9
D:匹配所有的非數字,包含下劃線
s:匹配所有空白字元(空格、TAB等)
S:匹配所有非空白字元,包含下劃線
w:匹配所有字母、漢字、數字a-z A-Z 0-9
W:匹配所有非字母、漢字、數字,包含下劃線
特殊字元:
$:匹配一行的結尾(必須放在正則表達式最後面)
^:匹配一行的開頭(必須放在正則表達式最前面)
*:前面的字元可以出現0次或多次(0~無限)
+:前面的字元可以出現1次或多次(1~無限)
?:變"貪婪模式"為"勉強模式",前面的字元可以出現0次或1次
.:匹配除了換行符" "之外的任意單個字元
|:兩項都進行匹配
[ ]:代表一個集合,有如下三種情況
[abc]:能匹配其中的單個字元
[a-z0-9]:能匹配指定范圍的字元,可取反(在最前面加入^)
[2-9] [1-3]:能夠做組合匹配
{ }:用於標記前面的字元出現的頻率,有如下情況:
{n,m}:代表前面字元最少出現n次,最多出現m次
{n,}:代表前面字元最少出現n次,最多不受限制
{,m}:代表前面字元最多出現n次,最少不受
{n}:前面的字元必須出現n次
㈥ Python re模塊 正則表達式之compile函數
為了重復利用同一個正則對象,需要多次使用這個正則表達式的話,使用re.compile()保存這個正則對象以便復用,可以讓程序更加高效。
1)re.compile
參數:
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 為了增加可讀性,忽略空格和' # '後面的注釋
案例:
在上面,當匹配成功時返回一個 Match 對象,其中:
2)re.findall
在字元串中找到正則表達式所匹配的所有子串,並返回一個列表,如果有多個匹配模式,則返回元組列表,如果沒有找到匹配的,則返回空列表。
注意: match 和 search 是匹配一次 findall 匹配所有。
參數:
案例:
3)re.finditer
和 findall 類似,在字元串中找到正則表達式所匹配的所有子串,並把它們作為一個迭代器返回。
案例:
4)re.split
split 方法按照能夠匹配的子串將字元串分割後返回列表。
案例:
從上篇Python re模塊 正則表達式到這篇,我們已經把常用的正則匹配的方法學會了。
關注我,堅持每日積累一個技巧, 長期堅持 ,我們將會不斷進步。
#python# #程序員# #請回答,你的年度知識點# #教育聽我說# #計算機#