python中的re模塊(正則表達式)

re模塊是python中特有的,但是正則表達式是通用的。

正則表達式介紹

re模塊常用函數


正則表達式介紹

(1)特殊符號處理常用邏輯

符號 含義 正則表達式 可以匹配的例子 不可能匹配的例子
. 匹配任一字符 "a.c" "abc",''amc" "addc","addds"
^ 匹配以某個字符開始的字符串 "^a" "accc" "vccc"
$ 匹配以某個字符結尾的字符串 "a$" "csada" "ssum"
[] 匹配多個字符,可以將[]看作字典查找匹配 "[abcd]" "ab"

"mn" 

[^...] 匹配非字符組中的字符 "[^abc]" "ssds" "abc"
a|b 匹配a或者b "root|cat" "root" "big"
() 匹配括號內的表達式 "(k|d)ing" "ding" "crying"

       重複型的匹配符號

符號 含義 正則表達式 可以匹配的例子
+ 匹配一次或多次 "(a|c)+d$" "ad","caccd"
* 匹配零次或多次 "(a|c)*d$" "d","aaad"
? 匹配零次或一次 "(a|c)?d$" "ad","cd","d"
{n} 匹配確定的 n次(n爲正整數) "[0-9]{2}"       "21","26"
{n,} 至少匹配n次 "[0-9]{3,}"        "001","003003"
{n,m} 最少匹配 n次且最多匹配 m 次 "[0-9]{2,4}"          "23","231","6551"

關於[]一些常用的匹配:

字符 含義
[0-9] 匹配0-9這10個數字
[a-z] 匹配a-z這26個小寫字母
[A-Z] 匹配A-Z這26個大寫字母
[a-f0-7F-M] 匹配a-f小寫字母,匹配0-7數字,匹配F-M大寫字母

轉義字符 : \

在[]中有一些表達需要看作特殊符號,因此需要用到"\"。如果想要匹配某段文字中的一個"\",則需要4個反斜槓"\\\\"(在正則中需要4個)。解釋:前兩個反斜槓出來一個"\",後兩個反斜槓也出來一個"\",這兩個被送進正則表達中,由於"\"在正則中,有轉義的作用,因此"\\"被翻譯成一個普通的斜槓。

這時,可以利用原聲字符串來解決這個問題,上面的這個可以寫成 r"\\",即"\\"不轉義直接送到正則表達式中,因此正則表達式讀取後就是"\"。

在正則表達式中,轉義字符加一些字母有一些特殊的意思,如下表所示。

字符 說明 正則表達式 可以匹配的例子 不可以匹配的例子
\d 匹配一個數字 "aca\d" "aca2" "acas"
\s 匹配任意空白符 "a\sb" "a b" (一個空格) "abb"
\t 匹配一個製表符 "\t"    
\n 匹配一個換行符 "\nA"    
\w 匹配字母、數字、下劃線 "a\wc" "a_c" "a$c"
\f 匹配一個換頁符      
\b 匹配一個單詞邊界      

re模塊常用函數

(1) re.match(regex, string, flags=0)

從字符串的起始位置匹配,匹配成功返回一個match對象,否則返回None

import re

regex = "a.c"
string = "abc"
print(re.match(regex,string))

output:
<_sre.SRE_Match object; span=(0, 3), match='abc'>

#含義:begin position:0 ;end position:3;match string is "abc"

(2) re.search(regex,string) 

掃描整個字符串並返回第一個成功的匹配的,如果沒有就返回None

import re

regex = r"\d.\\c"
string = "1A\c2\sc"
print(re.search(regex,string))

output:
<_sre.SRE_Match object; span=(0, 4), match='1A\\c'>

(3)re.sub(regex, repl, string, count=0, flags=0)

替換字符串中的匹配項, regex 正則中的模式字符串,repl替換的字符串

count : 模式匹配後替換的最大次數,默認 0 表示替換所有的匹配

flags是一個標誌位,不怎麼用不寫了。

import re
regex = r'#.*$'
string = "2004-959-559 # 這是一個國外電話號碼"
print(re.sub(regex,"",string))

output:
2004-959-559 

(4)re.compile(regex)

生成一個帶有regex正則表達式的對象,供其他函數split,match,search使用。例子看(5)。

(5)re.split(regex, string,maxsplit)

按照能夠匹配的子串將字符串分割後返回列表

import re
regex = "[a|b]+c"
pattern = re.compile("[a|b]+c")
string = "acbcbdcksnfcvscdbcacccbc"
print(re.split(regex,string,maxsplit=3)) #最大分隔3次
print(pattern.split(string))

output:
['', '', 'bdcksnfcvscd', 'acccbc']
['', '', 'bdcksnfcvscd', '', 'cc', '']

(6)re.findall(string,begin,end)

從字符串中找到匹配的所有子串,作爲列表返回;如果沒有找到匹配的,則返回空列表。

import re
pattern = re.compile("[a|b]+c")
string = "acbcbdcksnfcvscdbcacccbc"
print(pattern.findall(string))
print(pattern.findall(string,5,len(string))) 
### 從5位置開始匹配直到結尾

output:
['ac', 'bc', 'bc', 'ac', 'bc']
['bc', 'ac', 'bc']

(7)re.finditer(string)

與re.findall 類似,在字符串中找到正則表達式所匹配的所有子串,並把它們作爲一個迭代器返回。

import re
pattern = re.compile("[a|b]+c")
string = "acbcbdcksnfcvscdbcacccbc"
match = []
for i in pattern.finditer(string):
    match.append(i.group(0))
print(match)

output:
['ac', 'bc', 'bc', 'ac', 'bc']

 

參考:

https://www.runoob.com/python/python-reg-expressions.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章