1. 先說一下findall()函式的兩種表示形式
import re
kk = re.compile(r'\d+')
kk.findall('one1two2three3four4')
#[1,2,3,4]
#注意此處findall()的用法,可傳兩個引數;
kk = re.compile(r'\d+')
re.findall(kk,"one123")
#[1,2,3]
2. 正規表示式可能遇到的坑 --- 正規表示式中有括號()
1. 正規表示式中當沒有括號時,就是正常匹配,在本例中"/w+/s+/w+"第一次匹配到的字元為"2345 3456",由於是貪婪模式會 繼續匹配,第二次從"4567"開始匹配匹配到的結果為字串"4567 5678"
import re
string="2345 3456 4567 5678"
regex=re.compile("\w+\s+\w+")
print(regex.findall(string))
#['2345 3456', '4567 5678']
!!! 首先的知道各個字元所表達的含義,這裡只說一下/s 和 /s
\s -- 匹配任何不可見字元,包括空格、製表符、換頁符等等
\s -- 匹配任何可見字元 通常[/s/s] -- 可匹配任意字元
[\s\s]*? -- 匹配懶惰模式的任意字元
2. 正規表示式中有乙個括號時,其輸出的內容就是括號匹配到的內容,而不是整個表示式所匹配到的結果,但是整個正規表示式執 行了只不過只輸出括號匹配到的內容, 在第一次匹配時跟上述沒有括號時一樣,匹配到 "2345 3456" ,只不過只輸出(/w+)匹配 到的結果 即"2345",第二次匹配同理從"4567" 開始,匹配到"4567 5678",但是還是只是輸出"4567"
import re
string="2345 3456 4567 5678"
regex=re.compile("(\w+)\s+\w+")
print(regex.findall(string))
#['2345', '4567']
3. 當正規表示式中有兩個括號時,其輸出是乙個list 中包含2個 tuple,從輸出的結果可以看出,有兩個元組,每乙個元組中有兩 個字串 : 其中第乙個字串"2345 3456"是最外面的括號輸出的結果,第二個是裡面括號(/w+)輸出的結果 "2345", 第二個 元組是 第二次匹配的結果 -- 詳解同第一次匹配。
import re
string="2345 3456 4567 5678"
regex=re.compile("((\w+)\s+\w+)")
print(regex.findall(string))
#[('2345 3456', '2345'), ('4567 5678', '4567')]
希望對大家有幫助!! 遠離大坑
python常用模組之re模組(正則)
python種的re模組常用的5種方法,分別是re.match re.search re.findall re.split re.sub。在介紹五種方法之前,需要介紹一下正則的基礎。表示任意字元,除 n以為 轉義字元 字符集,表示取其中任意乙個字元。比如 abc d 可以匹配到ad bd cd。d ...
python常用模組之 正則re模組
python中使用正規表示式的步驟 1.匯入re模組 import re 2.初始化乙個regex物件 re.compile 3.剛剛建立的regex物件呼叫search方法進行匹配,返回要給march物件 4.剛剛的march物件呼叫group方法,展示匹配到的字串 下面例子的知識點 對正規表示式...
Python 正則re模組之findall 詳解
python 正則re模組之findall 詳解 先說一下findall 函式的兩種表示形式 import re kk re.compile r d kk.findall one1two2three3four4 1,2,3,4 注意此處findall 的用法,可傳兩個引數 kk re.compile...