python多個正則
1. python 正則表達式同時提取多個字元內容
那是因為正則表達式r'a(.+?)b|wz's和sd的結果在第一捕獲組中,而wz在第0捕獲組中,所以你要不然把wz也用小括弧括起來r'a(.+?)b|(wz)'這樣分別取第一和第局凱二捕獲組的數據,要不然你用r'(?<=a).+?(?=b)|wz 前向吵臘畝預搜索(?<=)和後向預搜索(?=)這樣沒有捕獲組升森,結果都在第0捕獲組中
完整的兩種方法的Python程序如下
#!/usr/bin/python
importre
text='asb,fasdbwz'
u=r'a(.+?)b|(wz)'
result=re.findall(u,text)
foriinrange(0,len(result)):
ifresult[i][0]=='':
print(result[i][1])
else:
print(result[i][0])
運行結果
s
sd
wz
第二種方法
#!/usr/bin/python
importre
text='asb,fasdbwz'
u=r'(?<=a).+?(?=b)|wz'
result=re.findall(u,text)
foriinrange(0,len(result)):
print(result[i])
運行結果
s
sd
wz
2. 在PYTHON中如何匹配一個存在多個相同的正則表達式模式的字元串中的所有正則表達式模式
你的正則表達式使用了貪婪模式的匹配(.*),應該用非貪婪模式,正則表達式應該為<a href="/(.*?)-desktop-wallpapers.html
完整的python語言程序如下
#!/usr/bin/python3 import re a = '<html><body><p>[<a href="/aero-desktop-wallpapers.html" title="Aero HD Wallpapers">Aero</a>, <a href="/animals-desktop-wallpapers.html" title="Animals HD Wallpapers">Animals</a>, <a href="/architecture-desktop-wallpapers.html" title="Architecture HD Wallpapers">Architecture</a>,Wallpapers">Artistic</a>, ........(省略)......... <a href="/vintage-desktop-wallpapers.html" title="Vintage HD Wallpapers">Vintage</a>]</p></body></html>'titles = re.findall('<a href="/(.*?)-desktop-wallpapers.html',str(a))print (titles) 運行結果['aero', 'animals', 'architecture', 'vintage']
3. 學Python正則表達式,這一篇就夠了
正則表達式是一個特殊的字元序列,可以幫助您使用模式中保留的專門語法來匹配或查找其他字元串或字元串集。 正則表達式在UNIX世界中被廣泛使用。
註:很多開發人員覺得正則表達式比較難以理解,主要原因是缺少使用或不願意在這上面花時間。
re模塊在Python中提供對Perl類正則表達式的完全支持。如果在編譯或使用正則表達式時發生錯誤,則re模塊會引發異常re.error。
在這篇文章中,將介紹兩個重要的功能,用來處理正則表達式。 然而,首先是一件小事:有各種各樣的字元,這些字元在正則表達式中使用時會有特殊的意義。 為了在處理正則表達式時避免混淆,我們將使用:r'expression'原始字元串。
匹配單個字元的基本模式
編譯標志可以修改正則表達式的某些方面。標志在re模塊中有兩個名稱:一個很長的名稱,如IGNORECASE,和一個簡短的單字母形式,如。
1.match函數
此函數嘗試將RE模式與可選標志的字元串進行匹配。
下面是函數的語法 :
這里是參數的描述 :
pattern : 這是要匹配的正則表達式。
string : 這是字元串,它將被搜索用於匹配字元串開頭的模式。 |
flags : 可以使用按位OR(|)指定不同的標志。 這些是修飾符,如下表所列。
re.match函數在成功時返回匹配對象,失敗時返回None。使用match(num)或groups()函數匹配對象來獲取匹配的表達式。
示例
當執行上述代碼時,會產生以下結果 :
2.search函數
此函數嘗試將RE模式與可選標志的字元串進行匹配。
下面是這個函數的語法 :
這里是參數的描述 :
pattern : 這是要匹配的正則表達式。
string : 這是字元串,它將被搜索用於匹配字元串開頭的模式。 |
flags : 可以使用按位OR(|)指定不同的標志。 這些是修飾符,如下表所列。
re.search函數在成功時返回匹配對象,否則返回None。使用match對象的group(num)或groups()函數來獲取匹配的表達式。
示例
當執行上述代碼時,會產生以下結果 :
3.匹配與搜索
Python提供基於正則表達式的兩種不同的原始操作:match檢查僅匹配字元串的開頭,而search檢查字元串中任何位置的匹配(這是Perl默認情況下的匹配)。
示例
當執行上述代碼時,會產生以下結果 :
4.搜索和替換
使用正則表達式re模塊中的最重要的之一是sub。
模塊
此方法使用repl替換所有出現在RE模式的字元串,替換所有出現,除非提供max。此方法返回修改的字元串。
示例
當執行上述代碼時,會產生以下結果 :
5.正則表達式修飾符:選項標志
正則表達式文字可能包含一個可選修飾符,用於控制匹配的各個方面。 修飾符被指定為可選標志。可以使用異或(|)提供多個修飾符,如前所示,可以由以下之一表示 :
6.正則表達模式
除了控制字元(+ ? . * ^ $ ( ) [ ] { } | ),所有字元都與其自身匹配。 可以通過使用反斜杠將其轉換為控制字元。
7.正則表達式示例
字元常量
字元類
特殊字元類
重復匹配
非貪婪重復
這匹配最小的重復次數 :
用圓括弧分組
反向引用
這與以前匹配的組再次匹配 :
備擇方案
python|perl : 匹配「python」或「perl」
rub(y|le) : 匹配 「ruby」 或 「ruble」
Python(!+|?) : 「Python」後跟一個或多個! 還是一個?
錨點
這需要指定匹配位置。
帶括弧的特殊語法
開課吧廣場-人才學習交流平台-開課吧
4. python正則表達式是什麼
python正則表達式是:
'hing'
'wing'
'123456'
'dddddd'
'regex.py'
'.*.py'
正則表達式(簡稱為 regex)是一些由字元和特殊符號組成的字元串, 描述了模式的重復或者表述多個字元。正則表達式能按照某種模式匹配一系列有相似特徵的字元串。換句話說, 它們能夠匹配多個字元串。
孤立的一個正則表達式並不能起到匹配字元串的作用,要讓其能夠匹配目標字元,需要創建一個正則表達式對象。通常向compile()函數傳入一個原始字元形式的正則表達式,即 r'.....'。
要讓正則表達式不區分大小寫,可以向re.compile()傳入re.IGNORECASE或re.I,作為第二個參數。通過傳入re.DOTALL作為re.compile()的第二個參數,可以讓句點字元匹配所有字元,包括換行字元。
5. python 怎麼獲得符合正則表達式的多個結果
你好:
group是一個數組;
試試數組的長度;
6. 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常用的正則表達式處理函數詳解的文章就介紹到這了,希望大家以後多多支持!
7. python正則表達式有多個條件
兩畝核種桐乎:
1.
m = re.match(r'匹配條件', '待匹配內容')
2.
pattern = re.compile(r'局耐悉匹配條件')m = pattern.match('待匹配內容')
8. 如何用python正則
(1)re.match()函數
re.match 嘗試從字元串的開始匹配一個模式。
函數語法:
re.match(pattern, string, flags=0)
函數參數說明:
參數
描述
pattern 匹配的正則表達式
string 要匹配的字元串。
flags 標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。
匹配成功re.match方法返回一個匹配的對象,否則返回None。
我們可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。
匹配對象方法
描述
group(num=0) 匹配的整個表達式的字元串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組。
groups() 返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。
(2)re.research()函數
re.search匹配整個字元串,直到找到一個匹配。
函數語法:
re.search(pattern, string, flags=0)
函數參數說明:
參數
描述
pattern 匹配的正則表達式
string 要匹配的字元串。
flags 標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。
匹配成功re.search方法方法返回一個匹配的對象,否則返回None。
我們可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。
匹配對象方法
描述
group(num=0) 匹配的整個表達式的字元串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組。
groups() 返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。
(3)實例
我這里採用re.search()函數解決的問題。
測試數據集為購物網站用戶評論
實例代碼:
[python]view plain
#-*-coding:utf-8-*-
importsys
importre
reload(sys)
text=open('JD_DFB_comments.txt')
line=text.readline()
#i=0
whileline:
#i=i+1
#re.search匹配整個字元串,直到找到一個匹配。
n1=re.search(r'(要(是|能)(.*)就(更|好|再|直觀|完美|太)(.*)了)',line)
n2=re.search(r'(如果)(.*)就(更|好|再|直觀|完美|太)(.*)了',line)
#打開將要寫入的數據
data=open('aa.txt','a')
ifn1:
#printline
data.write(line)#寫入匹配到的數據
#printi記錄匹配結果所在的行數
#printn1.group()#等於printline
printn1.group(3)#打出第三個括弧里的內容
ifn2:
#printn2.group()
printn2.group(2)
line=text.readline()
text.close()
閱讀更多
個人分類:Python語言
想對作者說點什麼?我來說一句
Python中re的match、search、findall、finditer區別
9. python正則表達式提取多個匹配內容
替換掉不就行咯,明和皮像這激差樣:x0dx0are.sub(r'<[A-Z]+>',' ',『棚大eng li aas x0dx0a』)x0dx0a或者:x0dx0a>>> ' '.join(re.split(r'<[A-Z]+>',' eng li aas '))x0dx0a' eng li aas ddde iiiiideeeeef 10. python 怎麼獲得符合正則表達式的多個結果
比如 p=re.search("耐肢\d","1a2b3c").group() 是['1'], 怎麼同時獲得2,3??
>>>
group是一個數昌伏世組廳喚;
試試數組的長度;