1 import re 2 kk = re.compile(r'\d+') 3 kk.findall('one1two2three3four4') 4 #[1,2,3,4] 5 6 #注意此處findall()的用法,可傳兩個參數; 7 kk = re.compile(r'\d+') 8 re.findall(kk,"one123") 9 #[1,2,3]
在本例中"/w+/s+/w+"第一次匹配到的字符爲"2345 3456",因爲是貪婪模式會 繼續匹配,第二次從"4567"開始匹配匹配到的結果爲字符串"4567 5678"正則表達式
1 import re 2 string="2345 3456 4567 5678" 3 regex=re.compile("\w+\s+\w+") 4 print(regex.findall(string)) 5 #['2345 3456', '4567 5678'] 6 #補充: 7 #\s -- 匹配任何不可見字符,包括空格、製表符、換頁符等等 8 #\S -- 匹配任何可見字符 一般[/s/S] -- 可匹配任意字符 9 #[\s\S]*? -- 匹配懶惰模式的任意字符
原理:正則表達式中有一個括號時,其輸出的內容就是括號匹配到的內容,而不是整個表達式所匹配到的結果,可是整個正則表達式執行了,只不過只輸出括號匹配到的內容,函數
匹配過程:spa
1. 第一次匹配時跟上述沒有括號時同樣,匹配到 "2345 3456" ,只不過只輸出(/w+)匹配 到的結果 即"2345",code
2. 第二次匹配同理從"4567" 開始,匹配到"4567 5678",可是,只輸出"4567"
blog
import re string="2345 3456 4567 5678" regex1=re.compile("(\w+)\s+\w+") print(regex1.findall(string)) #['2345', '4567']
從輸出的結果能夠看出,有兩個元組,每個元組中有 兩個字符串 :three
其中,第一個元組種的第一個字符串"2345 3456"是最外面的括號輸出的結果,第二個字符串是裏面括號(/w+)輸出的結果 "2345",字符串
第二個元組是 第二次匹配的結果 -- 詳解同第一次匹配。string
import re string="2345 3456 4567 5678" regex2=re.compile("((\w+)\s+\w+)") print(regex2.findall(string)) #[('2345 3456', '2345'), ('4567 5678', '4567')]
第一個 regex 中不帶有括號,其輸出的內容就是整個表達式所匹配到的內容。class
第二個 regex 中帶有1個括號,其輸出的內容就是括號匹配到的內容,而不是整個表達式所匹配到的結果。import
第三個 regex 中是帶有2個括號的,咱們能夠看到其輸出是一個list 中包含2個 tuple,--- 多個括號就會返回 多個括號分別匹配到的結果
正則表達式的特色:
1. 有括號時只能匹配到括號中的內容,沒有括號就正常匹配。
2. 在正則裏面 「()」 表明的是分組的意思,一個括號表明一個分組,你只能匹配到"()"中的內容