Python 正則模塊詳情
在Python中提供了操作正則表達式的模塊,即re模塊。
1、正則表達式的裝飾符
| 修飾符 | 描述 | 完整名稱 |
|---|---|---|
| re.I | 使匹配對大小寫不敏感 | re.IGNORECASE |
| re.A | 讓 \w, \W, \b, \B, \d, \D, \s 和 \S 只匹配ASCII,而不是Unicode | re.ASCII |
| re.L | 做本地化識別(locale-aware)匹配 | re.LOCALE |
| re.M | 多行匹配,影響 ^ 和 $,多行模式下是支持匹配行開頭 | re.MULTILINE |
| re.S | 使 . 匹配包括換行在內(nèi)的所有字符 | e.DOTALL |
| re.U | 根據(jù)Unicode字符集解析字符。這個標(biāo)志影響 \w, \W, \b, \B. | re.UNICODE |
| re.X | 該標(biāo)志通過給予你更靈活的格式以便你將正則表達式寫得更易于理解。 |
2、查找單個匹配項
2.1 match
re.match 如果 string 開始的0或者多個字符匹配到了正則表達式樣式,就返回一個相應(yīng)的匹配對象 。 如果沒有匹配,就返回 None ;注意它跟零長度匹配是不同的。
語法格式:
re.match(pattern, string, flags=0)
pattern:匹配的正則表達式string:要匹配的字符串。flags:標(biāo)志位,用于控制正則表達式的匹配方式,
如:是否區(qū)分大小寫,多行匹配等等。
匹配成功re.match方法返回一個匹配的對象,否則返回None。
示例代碼:
""" -*- coding:uft-8 -*- author: 小甜 time:2020/5/30 """ import re string1 = "hello python" string2 = "hell5o python" pattern = r"[a-z]+\s\w+" # a-z出現(xiàn)1次到任意次加一個\s加任意字符出現(xiàn)1次到任意次 print(re.match(pattern, string1)) # <re.Match object; span=(0, 12), match='hello python'> print(re.match(pattern, string2)) # None
開局導(dǎo)入
re模塊,r""表示為一個正則表達式
因為string2中間出現(xiàn)了一個數(shù)字5 所以不匹配
2.2 group
re.group是從Match對象中獲取結(jié)果的,不過不分組默認(rèn)為0,分組索引則從0開始(0是完整的一個匹配),如果多個分組,則第一個分組是1;也可以為其命名使用
示例代碼:
"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string1 = "hello python"
string2 = "hell5o python"
pattern = r"[a-z]+\s\w+"
pattern1 = r"(\w+)(\s)(\w+)"
pattern2 = r"(?P<first>\w+\s)(?P<last>\w+)" # 命名分組
print(re.match(pattern, string1)) # <re.Match object; span=(0, 12), match='hello python'>
print(re.match(pattern, string1).group()) # hello python
print(re.match(pattern, string2)) # None
print(re.match(pattern1, string2).group(0)) # hell5o python
print(re.match(pattern1, string2).group(1)) # hell5o
print(re.match(pattern1, string2).group(2)) # 這里匹配的是那個空格
print(re.match(pattern1, string2).group(3)) # python
print(re.match(pattern2, string2).group("last")) # python
2.3 search
re.search 掃描整個字符串找到匹配樣式的第一個位置,并返回一個相應(yīng)的匹配對象 。如果沒有匹配,就返回一個 None ; 注意這和找到一個零長度匹配是不同的。語法結(jié)構(gòu)和match是一樣的
示例代碼:
""" -*- coding:uft-8 -*- author: 小甜 time:2020/5/30 """ import re string = "Hi World Hello python" pattern = r"Hello python" print(re.search(pattern, string).group()) # Hello python print(re.match(pattern, string)) # None
兩者的區(qū)別:
re.match只匹配字符串的開始,如果字符串開始不符合正則表達式,則匹配失敗,函數(shù)返回 None,而 re.search匹配整個字符串,直到找到一個匹配。
2.4 fullmatch
re.fullmatch如果整個 string 匹配這個正則表達式,就返回一個相應(yīng)的匹配對象 。 否則就返回 None ; 注意跟零長度匹配是不同的。
語法格式跟上面的也是一樣的
示例代碼:
""" -*- coding:uft-8 -*- author: 小甜 time:2020/5/30 """ import re string = "Hi World Hello python" pattern = r"Hi World Hello python" pattern1 = r"hi World hello python" print(re.fullmatch(pattern, string)) # <re.Match object; span=(0, 21), match='Hi World Hello python'> print(re.fullmatch(pattern1, string)) # None
三者的區(qū)別:
match:字符串開頭匹配search:查找任意位置的匹配項fullmatch:整個字符串要與正則表達式完全匹配
2.5 匹配對象
匹配對象總是有一個布爾值 True。如果沒有匹配的話match() 和 search() 返回 None 所以可以簡單的用 if 語句來判斷是否匹配
示例代碼:
import re
string = "Hi World Hello python"
pattern = r"Hello python"
match1 = re.search(pattern, string)
match2 = re.match(pattern, string)
if match1:
print(match1.group()) # Hello python
if match2: # 因為match2的值為none所以不執(zhí)行
print(match2.group())
3、查找多個匹配項
3.1 compile
re.compile將正則表達式的樣式編譯為一個正則對象,可以用于匹配
語法結(jié)構(gòu):
re.compile(pattern, flags=0)
pattern: 匹配的正則表達式flags: 標(biāo)志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。
3.2 findall
re.findall在字符串中找到正則表達式所匹配的所有子串,并返回一個列表,如果沒有找到匹配的,則返回空列表。與match 和 search 不同的是 match 和 search 是匹配一次 findall 匹配所有。
語法結(jié)構(gòu):
re.findall(string[, pos[, endpos]])
string:待匹配的字符串。pos:可選參數(shù),指定字符串的起始位置,默認(rèn)為 0。endpos:可選參數(shù),指定字符串的結(jié)束位置,默認(rèn)為字符串的長度
3.3 finditer
pattern 在 string 里所有的非重復(fù)匹配,返回為一個迭代器保存了匹配對象 。 *string*從左到右掃描,匹配按順序排列??掌ヅ湟舶诮Y(jié)果里。
語法結(jié)構(gòu)同match
示例代碼:
import re
from collections.abc import Iterator # 導(dǎo)入判斷是否為迭代器的對象
string = "hello python hi javascript"
pattern = r"\b\w+\b"
pattern_object = re.compile(r"\b\w+\b")
print(type(pattern_object)) # <class 're.Pattern'>
findall = pattern_object.findall(string)
for i in findall:
print(i)
finditer = re.finditer(pattern, string)
# 判斷是否為迭代器
print(isinstance(finditer, Iterator)) # True
for _ in range(4):
finditer1 = finditer.__next__() # 取出下一個值
print(finditer1.group())
'''
--循環(huán)結(jié)果--
hello
python
hi
javascript
'''
如果有超大量的匹配項的話,返回finditer的性能要優(yōu)于findall,這就是列表和迭代器的區(qū)別。
4、分割split
re.split方法按照能夠匹配的子串將字符串分割后返回列表
語法結(jié)構(gòu):
re.split(pattern, string[, maxsplit=0, flags=0])
pattern:匹配的正則表達式string:分隔符。maxsplit:分隔次數(shù),maxsplit=1分隔一次,默認(rèn)為 0,不限制次數(shù)。flags:標(biāo)志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。
示例代碼:
import re string = '''hello hi good morning goodnight python javascript Linux ''' pattern = r'\s+' # 以空格回車制表符為回車符 print(re.split(pattern, string)) # 不限制次數(shù)分隔 # ['hello', 'hi', 'good', 'morning', 'goodnight', 'python', 'javascript', 'Linux', ''] print(re.split(pattern, string, 5)) # 分隔5次 # ['hello', 'hi', 'good', 'morning', 'goodnight', 'python\njavascript\nLinux\n']
與str模塊的split不同的是,re模塊的split支持正則
4.1 替換
4.1.1 sub
re.sub用于替換字符串中的匹配項
語法結(jié)構(gòu):
re.sub(pattern, repl, string, count=0, flags=0)
pattern: 正則中的模式字符串。repl: 替換的字符串,也可為一個函數(shù)。string: 要被查找替換的原始字符串。count: 模式匹配后替換的最大次數(shù),默認(rèn) 0 表示替換所有的匹配。flags: 編譯時用的匹配模式,數(shù)字形式。
到這里就可以完成一個某手的評論區(qū),修改不良評論的小案例
import re
string = input("請輸入評論:")
pattern = r"[美麗可愛大方]{1}" # 檢測的字符
print(re.sub(pattern, "萌", string))
效果圖:


4.1.2 subn
行為與 sub() 相同,但是返回一個元組 (字符串, 替換次數(shù)).
4.2 escape
re.escape(pattern)轉(zhuǎn)義 pattern 中的特殊字符。例如正則里面的元字符.
示例代碼:
import re pattern = r'\w\s*\d\d.' # 打印pattern的特殊字符 print(re.escape(pattern)) # \w\s*\d\d.
任意可能包含正則表達式元字符的文本字符串進行匹配,它就是有用的,不過容易出現(xiàn)錯誤,手動轉(zhuǎn)義比較好
4.3 purge
re.purge()清除正則表達式的緩存。
到此這篇關(guān)于Python 正則模塊詳情的文章就介紹到這了,更多相關(guān)Python 正則模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
jupyter-lab設(shè)置自啟動及遠程連接開發(fā)環(huán)境
本文主要介紹了jupyter-lab設(shè)置自啟動及遠程連接開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Flask框架重定向,錯誤顯示,Responses響應(yīng)及Sessions會話操作示例
這篇文章主要介紹了Flask框架重定向,錯誤顯示,Responses響應(yīng)及Sessions會話操作,結(jié)合實例形式分析了flask框架中重定向,錯誤顯示,Responses響應(yīng)及Sessions會話操作相關(guān)使用技巧與操作注意事項,需要的朋友可以參考下2019-08-08
Python打工人必備之windows倒計時鎖屏功能的實現(xiàn)
每個人的電腦里都會有不想讓別人知道的隱私,或者是上班時間偷偷摸魚怕被發(fā)現(xiàn)的小秘密。那怎么辦?就干脆把隱私鎖起來!從源頭上杜絕被他人偷窺自己的隱私。本文就來用Python實現(xiàn)一個windows倒計時鎖屏功能,需要的可以參考一下2023-04-04

