re.match函數 re.match 嘗試從字元串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。 函數語法 參數說明: pattern 要匹配的正則表達式string 要匹配的字元串flags 標誌位,用於控制正則表達式的匹配方式,例如,是否要區分大小寫等等, ...
re.match函數
re.match 嘗試從字元串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。
函數語法
re.match(pattern, string, flags=0)
參數說明:
pattern 要匹配的正則表達式
string 要匹配的字元串
flags 標誌位,用於控制正則表達式的匹配方式,例如,是否要區分大小寫等等,參考正則表達式修飾符
實例
import re print(re.match('abc','abcdefghi').span()) #在起始位置匹配 print(re.match('ghi','abcdefghi')) #不在起始位置匹配
運行結果
(0, 3)
None
re.search方法
re.search 掃描整個字元串並返回第一個成功匹配。
函數語法
re.search(pattern, string, flags=0)
實例
import re print(re.search('abc','abcdefghi').span()) #在起始位置匹配 print(re.search('ghi','abcdefghi').span()) #不在起始位置匹配
運行結果
(0, 3) (6, 9)
re.match與re.search的區別:
re.match只匹配字元串的開始,如果字元串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字元串,直到找到一個匹配。
檢索和替換
Python 的 re 模塊提供了re.sub用於替換字元串中的匹配項。
語法
re.sub(pattern, repl, string, count=0, flags=0)
參數說明
- pattern : 正則中的模式字元串。
- repl : 替換的字元串,也可為一個函數。
- string : 要被查找替換的原始字元串。
- count : 模式匹配後替換的最大次數,預設 0 表示替換所有的匹配。
實例
import re phone_number='3-123-456-789'
#將'-'替換成'@' number=re.sub('-','@',phone_number) print('修改後的電話號碼',number)
運行結果
修改後的電話號碼 3@123@456@789
repl參數是一個函數時
實例
import re
#將匹配到的數字乘3 def double(a): c=int(a.group('c')) return str(3*c) print(re.sub('(?P<c>\d+)',double,'asd-645-sa-4-da-87-ad-6'))
運行結果
asd-1935-sa-12-da-261-ad-18
compile函數
compile 函數用於編譯正則表達式,生成一個正則表達式( Pattern )對象,供 match() 和 search() 這兩個函數使用。
語法格式為:
re.compile(pattern, [flags])
實例
import re pattern = re.compile(r'\d+') a = pattern.match('one12twothree34four',3,10) #從 1 開始查找 print(f'{a.group(),a.span()}') b = pattern.search('one12twothree34four', 5, 15)#從 t 開始搜索 print(f'{b.group(),b.span()}')
運行結果
('12', (3, 5)) ('34', (13, 15))
findall
在字元串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
註意: match 和 search 是匹配一次 findall 匹配所有。
語法格式
findall(pattern, string, flags=0)
實例
import re reg='\d+' print(re.findall(reg,'1a2b3c4d5e6f7g'))
運行結果
['1', '2', '3', '4', '5', '6', '7']
split
split 方法按照能夠匹配的子串將字元串分割後返回列表
語法格式
re.split(pattern, string, maxsplit, flags)
參數
maxsplite | 分割次數,maxsplit=1即分割一次,預設為0,不限制次數 |
實例
import re Str='1a2b3c4d5e6d7f' print(re.split('[a-z]',Str))
運行結果
['1', '2', '3', '4', '5', '6', '7', '']
正則表達式對象
re.MatchObject
group() 返回被 RE 匹配的字元串。
- start() 返回匹配開始的位置
- end() 返回匹配結束的位置
- span() 返回一個元組包含匹配 (開始,結束) 的位置
正則表達式修飾符 (flags)
修飾符 | 描述 |
---|---|
re.I | 使匹配對大小寫不敏感 |
re.L | 做本地化識別(locale-aware)匹配 |
re.M | 多行匹配,影響 ^ 和 $ |
re.S | 使 . 匹配包括換行在內的所有字元 |
re.U | 根據Unicode字元集解析字元。這個標誌影響 \w, \W, \b, \B. |
re.X | 該標誌通過給予你更靈活的格式以便你將正則表達式寫得更易於理解。 |
正則表達式常用字元含義
普通字元 | 匹配自身 |
. | 預設匹配除\n之外的任意一個字元,若指定flag DOTALL,則匹配任意字元包括換行 |
^ | 匹配字元開頭,若指定flags MULTILINE,這種也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE) |
$ | 匹配字元結尾或e.search(r"^a","\nabc\neee",flags=re.MULTILINE).group()也可以 |
* | 匹配*號前的字元0次或多次re.findall("ab*","cabb3abcbbac") 結果為['abb', 'ab', 'a'] |
+ | 匹配前一個字元1次或多次re.findall("ab+","ab+cd+abb+bba") 結果['ab', 'abb'] |
? | 匹配前一個字元1次或0次 |
{m} | 匹配前一個字元m次 |
{n,m} | 匹配前一個字元n到m次re.findall("ab{1,3}","abb abc abbcbbb") 結果'abb', 'ab', 'abb'] |
| | 匹配|左或|右的字元re.search("abc|ABC","ABCBabcCD").group() 結果'ABC' |
(...) | 分組匹配re.search("(abc){2}a(123|456)c", "abcabca456c").group() 結果 abcabca456c |
[...] | 字元集,對應位置可以是字元集中的任意字元,字元集中的字元可以逐個給出也可以給出範圍,如[a-c]即[abc],[^abc]b表示取反即非abc |
\A | 只從字元開頭匹配re.search("\Aabc","alexabc") 是匹配不到的 |
\Z | 匹配字元結尾同$ |
\d | 匹配數字0-9 |
\w | 匹配[A-Za-z0-9] |
\D | 匹配非數字 |
\W | 匹配非[A-Za-z0-9] |
\s | 匹配空白字元、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 結果為 '\t' |
反斜杠作用:
- 反斜杠後邊跟元字元去除特殊功能;(即將特殊字元轉義成普通字元)
- 反斜杠後邊跟普通字元實現特殊功能;(即預定義字元)
- 引用序號對應的字組所匹配的字元串。
萌新第一次發博客,坐等大佬點評