findallPython返回值
㈠ python中如何使生成器函數來用元組返回一個字元串大寫字母個數和小寫字母個數
#如何使生成器函數來用元組返回一個字元串大寫字母個數和小寫字母個數
def getUorL(s):
# [A-Z]是匹配內容,str是待匹配的對象
rtn = f"大寫字母個數: {len(re.findall('[A-Z]',s))}"
yield rtn
# [a-z]是匹配內容,str_是待匹配的對象
rtn = f"小寫字母個數: {len(re.findall('[a-z]',s))}"
yield rtn
str = "10ABC23sD~45ffe67e;oo++"
#第一次返回大寫
g = getUorL(str)
print(next(g))
#第二次返回小寫
print(next(g))
㈡ 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 findall爬取網頁返回值為空
用pandas包爬取表格吧,其中有個read_html函數可以一次性讀取所有表格,並出錯為DataFrame的形式,儲存為list,調用DataFrame讀取你需要的就可以了。
㈣ 小白請教下python正則表達式findall()返回空值的問題
星號表示匹配0到任意次,因此多了兩個0長度的字元,因為'}'匹配非}的任意字元0次
改成至少一次就得到你期待的結果,就是把*改成+
㈤ 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常用的正則表達式處理函數詳解的文章就介紹到這了,希望大家以後多多支持!