Python內建模組之 re庫
十三、Python內建模組之 re庫,介紹正規表示式初階用法
13.1 re 庫的應用
re 庫是 Python 中處理正規表示式的標準庫,本篇部落格介紹 re 庫的同時,會簡單介紹一下正規表示式語法,如果想深入學習正規表示式,還需要好好下一番功夫。
13.1.1 正規表示式語法
正規表示式語法由字元和運算子構成,初期階段掌握下述這些內容即可。
運算子說明例子
.任何單個字元,極少不能匹配
[]字符集,對單個字元給出取值範圍[abc] 表示匹配 a、b、c,[a-z] 表示 a 到 z 單個字元
[^]非字符集,對單個字元給出排除範圍[^abc] 表示匹配 非 a、非 b、非 c 的單個字元
*前一個字元 0 次或無限次擴充套件abc* 表示 ab、abc、abcc、abccc 等
+前一個字元 1 次或無限次擴充套件abc+ 表示 abc、abcc、abccc 等
?前一個字元 0 次或 1 次abc? 表示 ab、abc
|左右表示式任意一個abc|def 表示 abc 或者 def
{m}擴充套件前 1 個字元 m 次ab{2}c,表示 abbc
{m,n}擴充套件前 1 個字元 m 到 n 次ab{1,2}c,表示 abc、abbc
^匹配字串開頭^abc 表示 abc 在字串開頭
$匹配字串結尾abc$ 表示 abc 在字串結尾
()分組標記,內部僅能使用 | 運算子(abc) 表示 abc,(a
\d數字,等價於 [0-9]
\w字元,等價於 [A-Za-z0-9]
以上表示僅僅為正則表達最基礎部分內容,如果希望深入研究正規表示式,建議尋找更加全面的資料進行學習,本文只做藥引。
13.1.2 re 庫基本用法
re 庫主要函式如下:
基礎函式:compile;
功能函式:search、match、findall、split、finditer、sub。
在正式學習之前,先了解一下原生字串。
在 Python 中,表示原生字串,需要在字串前面加上 r。
例如 my_str = 'i'am xiangpica' 在程式中會直接報錯,如果希望字串中 ' 可以正常執行,需要加上轉移字元 \,修改為 my_str = 'i\'am xiangpica'。
但這樣結合上文正規表示式中的運算子,就會出現問題,因為 \ 在正規表示式中是有真實含義的,如果你使用 re 庫去匹配字串中的 \,那需要使用 4 個反斜槓,為了避免這種情況出現,引入了原生字串概念。
# 不使用原生字串的正規表示式 "\\\\"
# 使用原生字串的正規表示式 r"\\"
在後文會有實際的應用。
接下來在學習一個案例,例如下述程式碼:
my_str='C:\number'
print(my_str)
C:
umber
本段程式碼的輸出效果如下,\n 被解析成了換行,如果想要遮蔽這種現象,使用 r 即可:
my_str=r'C:\number'
print(my_str)
輸出 C:\number。
13.2 re 庫相關函式說明
13.2.1 re.search 函式
該函式用於,在字串中搜尋正規表示式匹配到的第一個位置的值,返回 match 物件。
函式原型如下:
re.search(pattern,string,flags=0)
需求:在字串 夢想橡皮擦 good good 中匹配 橡皮擦。
import re
my_str='夢想橡皮擦 good good'
pattern = r'橡皮擦'
ret = re.search(pattern,my_str)
print(ret)
返回結果:。
search 函式的第三個引數 flags 表示正規表示式使用時的控制標記。
re.I,re.IGNORECASE:忽略正規表示式的大小寫;
re.M,re.MULTILINE:正規表示式中的 ^ 運算子能夠將給定字串的每行當做匹配的開始;
re.S,re.DOTALL:正規表示式中的 . 運算子能夠匹配所有字元。
最後將匹配到的字串進行輸出,使用下述程式碼即可實現。
import re
my_str = '夢想橡皮擦 good good'
pattern = r'橡皮擦'
ret = re.search(pattern, my_str)
if ret:
print(ret.group(0))
13.2.2 re.match 函式
該函式用於在目標字串開始位置去匹配正規表示式,返回 match 物件,未匹配成功返回 None,函式原型如下:
re.match(pattern,string,flags=0)
一定要注意是目標字串開始位置。
import re
my_str = '夢想橡皮擦 good good'
pattern = r'夢' # 匹配到資料
pattern = r'good' # 匹配不到資料
ret = re.match(pattern, my_str)
if ret:
print(ret.group(0))
re.match 和 re.search 方法都是一次最多返回一個匹配物件,如果希望返回多個值,可以透過在 pattern 里加括號構造匹配組返回多個字串。
13.2.3 re.findall 函式
該函式用於搜尋字串,以列表格式返回全部匹配到的字串,函式原型如下:
re.findall(pattern,string,flags=0)
測試程式碼如下:
import re
my_str = '夢想橡皮擦 good good'
pattern = r'good'
ret = re.findall(pattern, my_str)
print(ret)
13.2.4 re.split 函式
該函式將一個字串按照正規表示式匹配結果進行分割,返回一個列表。
函式原型如下:
re.split(pattern, string, maxsplit=0, flags=0)
re.split 函式進行分割的時候,如果正規表示式匹配到的字元恰好在字串開頭或者結尾,返回分割後的字串列表首尾都多了空格,需要手動去除,例如下述程式碼:
import re
my_str = '1夢想橡皮擦1good1good1'
pattern = r'\d'
ret = re.split(pattern, my_str)
print(ret)
執行結果:
['', '夢想橡皮擦', 'good', 'good', '']
切換為中間的內容,則能正確的分割字串。
import re
my_str = '1夢想橡皮擦1good1good1'
pattern = r'good'
ret = re.split(pattern, my_str)
print(ret)
如果在 pattern 中捕獲到括號,那括號中匹配到的結果也會在返回的列表中。
import re
my_str = '1夢想橡皮擦1good1good1'
pattern = r'(good)'
ret = re.split(pattern, my_str)
print(ret)
執行結果,你可以對比帶括號和不帶括號的區別進行學習:
['1夢想橡皮擦1', 'good', '1', 'good', '1']
maxsplit 參數列示最多進行分割次數, 剩下的字元全部返回到列表的最後一個元素,例如設定匹配 1 次,得到的結果是 ['1夢想橡皮擦1', '1good1']。
13.2.5 re.finditer 函式
搜尋字串,並返回一個匹配結果的迭代器,每個迭代元素都是 match 物件。函式原型如下:
re.finditer(pattern,string,flags=0)
測試程式碼如下:
import re 大連婦科醫院哪家好
my_str = '1夢想橡皮擦1good1good1'
pattern = r'good'
# ret = re.split(pattern, my_str,maxsplit=1)
ret =re.finditer(pattern, my_str)
print(ret)
13.2.6 re.sub 函式
在一個字串中替換被正規表示式匹配到的字串,返回替換後的字串,函式原型如下:
re.sub(pattern,repl,string,count=0,flags=0)
其中 repl 引數是替換匹配字串的字串,count 引數是匹配的最大替換次數。
import re
my_str = '1夢想橡皮擦1good1good1'
pattern = r'good'
ret = re.sub(pattern, "nice", my_str)
print(ret)
執行之後,得到替換之後的字串:
1夢想橡皮擦1nice1nice1
13.2.7 re 庫其它函式
其它比較常見的函式有:re.fullmatch(),re.subn(),re.escape(),更多內容可以查閱 官方文件,獲取一手資料。
13.3 re 庫的物件導向寫法
上文都是函式式寫法,re 庫可以採用物件導向的寫法,將正規表示式進行編譯之後,多次操作。核心用到的函式是 re.compile。
該函式原型如下:
regex = re.compile(pattern,flags=0)
其中 pattern 是正規表示式字串或者原生字串。
測試程式碼如下:
import re
my_str = '1夢想橡皮擦1good1good1'
# 正則物件
regex = re.compile(pattern = r'good')
ret = regex.sub("nice", my_str)
print(ret)
上述程式碼將正規表示式編譯為一個正則物件,後面在 regex.sub 函式中就不需要在寫正規表示式了,使用時,只需要將編譯好的 regex 物件替換所有的 re 物件,再去呼叫對應的方法。
13.4 re 庫的 match 物件
使用 re 庫匹配字串之後,會返回 match 物件,該物件具備以下屬性和方法。
13.4.1 match 物件的屬性
.string:待匹配的文字;
.re:匹配時使用的 pattern 物件;
.pos:正規表示式搜尋文字的開始位置;
.endpos:正規表示式搜尋文字的結束位置。
測試程式碼如下:
import re
my_str = '1夢想橡皮擦1good1good1'
regex = re.compile(pattern = r'g\w+d')
ret = regex.search(my_str)
print(ret)
print(ret.string)
print(ret.re)
print(ret.pos)
print(ret.endpos)
結果輸出:
1夢想橡皮擦1good1good1
re.compile('g\\w+d')
0
17
13.4.2 match 物件的方法
.group(0):獲取匹配後的字串;
.start():匹配字串在原始字串的開始位置;
.end():匹配字串在原始字串的結尾位置;
.span():返回(.start(),.end())
因為內容比較簡單,具體程式碼不再展示。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2763358/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python 內建模組:os模組Python
- python 內建模組續(二)Python
- Python3內建模組之json編碼解碼方法講解PythonJSON
- Python3內建模組之Pickle和cPickle資料持久化方法小結Python持久化
- Python3內建模組之玩出花兒的random隨機方法小結Pythonrandom隨機
- python基礎 之 正規表示式和re模組Python
- 內建模組--壓縮模組--zipfile
- 初識Node和內建模組
- Python 正規表示式 re 模組Python
- python re模組 正規表示式Python
- python正規表示式(re模組)Python
- 25.python模組(加密,os,re,json)Python加密JSON
- re模組
- 前端筆記之NodeJS(一)初識NodeJS&內建模組&特點前端筆記NodeJS
- Python 之 RE(正規表示式)常用Python
- python re模組常見使用方法整理Python
- 【python技巧】文字處理-re庫字元匹配Python字元
- nodejs平臺內建模組http伺服器NodeJSHTTP伺服器
- Python技法:用re模組實現簡易tokenizerPython
- python中re模組的使用(正規表示式)Python
- Python正規表示式簡記和re庫Python
- Python RE庫的貪婪匹配和最小匹配Python
- Python爬蟲— 1.4 正規表示式:re庫Python爬蟲
- dython:Python資料建模寶藏庫Python
- python之模組Python
- python3中的re模組簡單介紹及使用Python
- python re是什麼?Python
- Python模組之urllib模組Python
- python模組之collections模組Python
- Python基礎系列講解——內建庫之collections的使用Python
- python模組之configparserPython
- python模組之hashlibPython
- python之shutil模組Python
- python–模組之基本Python
- Python模組之jsonPythonJSON
- python的re正則匹配Python
- Re從零開始的UI庫編寫生活之按鈕UI
- Re從零開始的UI庫編寫生活之表格元件UI元件