網(wǎng)站首頁 編程語言 正文
正則口徑:知道前后取中間,如果最后$結(jié)束
python中則這表達(dá)式的方法通常由re.match re.search?re.findall
re.findall匹配的時候,會把結(jié)果放到list返回,如果沒有匹配到返回空list不會報錯
import re
s1=re.compile('\d+')
# 匹配數(shù)字
r1=s1.findall('sahduasu27bhsagd7236vbcsahg923')
print(r1)
s2=re.compile('\d+')
r2=re.findall(s2, 'gashgddsh32hjsagd3jh4hjk234jkhk213')
print (r2)
r3=re.findall('\d+', 'sjdjsk1232kdsjf324string')
print(r3)
# 執(zhí)行結(jié)果
# ['27', '7236', '923']
# ['32', '3', '4', '234', '213']
# ['1232', '324']
?示例及常用方式:
import re
a = "hfdsakjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaab"
# 1.找出字符串中有多少個ab, 兩個字符挨著
r1= re.findall(r"ab", a)
print(r1)
# 繼續(xù)查找如ab, aab, aaab,aaaab這種,a可以重復(fù),也就是匹配前面的a是1個或多個
# +是代表前面的字符出現(xiàn)1次或多次
r2= re.findall(r"a+b", a)
print(r2)
# *是代表匹配前面的字符出現(xiàn)0次或多次
r3= re.findall(r"a*b", a)
print(r3)
# 我們要匹配a和b之間有一個字符的,比如aab,abb,acb,adb都符合
# .就是匹配除 \n (換行符)以外的任意一個字符
r4= re.findall(r"a.b", a)
print(r4)
# 執(zhí)行結(jié)果:
# ['ab', 'ab', 'ab', 'ab']
# ['ab', 'ab', 'ab', 'aab']
# ['ab', 'ab', 'ab', 'b', 'aab']
# ['ajb', 'aab']
?貪婪與非貪婪:
import re
# 符號.* 貪婪,匹配從.*前面為開始到后面為結(jié)束的所有內(nèi)容
a = "hfdsakjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaabsdf"
r1= re.findall(r"a.*b", a)
print(r1)
# 符號.*? 非貪婪,遇到開始和結(jié)束就進(jìn)行截取,因此截取多次符合的結(jié)果,中間沒有字符也會被截取
r2= re.findall(r"a.*?b", a)
print(r2)
# ['akjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaab']
# ['akjhab', 'ab', 'ab', 'ajb', 'aab']
import re
# # 符號.* 貪婪,匹配從.*前面為開始到后面為結(jié)束的所有內(nèi)容
a = "hfdsakjhabsdgfjhabhjgdjabhjgajbkdkjdhfkaabsdf"
r1= re.findall(r"hfdsak.*?jgdj", a)
print(r1)
r2= re.findall(r"hfdsak(.*?)jgdj", a)
print(r2)
# ['hfdsakjhabsdgfjhabhjgdj']
# ['jhabsdgfjhabh']
# 看到區(qū)別了么,就是取出來的數(shù)據(jù)是否帶頭尾
?re.S
前面匹配都是一整串沒有換行的情況,如果我們需要匹配的內(nèi)容,中間剛好有換行了,那就匹配不到了。
import re
a = '''hfdsakjhabsdgfjhabhjgdj
abhjgajbkdkjdhfkaabsdf'''
r1= re.findall(r"hfdsak.*?kjdh", a)
print(r1)
# []
r2= re.findall(r"hfdsak(.*?)jgdj", a,flags=re.S)
print(r2)
# ['jhabsdgfjhabh']
正則表達(dá)式可以包含一些可選標(biāo)志修飾符來控制匹配的模式。修飾符被指定為一個可選的標(biāo)志。
修飾符 | 描述 |
---|---|
re.I | 使匹配對大小寫不敏感 |
re.L | 做本地化識別(locale-aware)匹配 |
re.M | 多行匹配,影響 ^ 和 $ |
re.S | 使 . 匹配包括換行在內(nèi)的所有字符 |
re.U | 根據(jù)Unicode字符集解析字符。這個標(biāo)志影響 \w, \W, \b, \B. |
re.X | 該標(biāo)志通過給予你更靈活的格式以便你將正則表達(dá)式寫得更易于理解。 |
多個標(biāo)志可以通過按位 OR(|) 它們來指定。如 re.I | re.M 被設(shè)置成 I 和 M 標(biāo)志
補(bǔ)充:實戰(zhàn)案例
如果上面的函數(shù)和參數(shù)含義都已經(jīng)掌握了,還需要進(jìn)一步通過案例加強(qiáng)理解,接下來舉例說明上面的三個函數(shù):
# 導(dǎo)入用于正則表達(dá)式的re模塊
import re
# 取出字符串string8中所有的天氣狀態(tài)
string8 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'輕度污染'},{ymd:'2018-01-02',tianqi:'陰~小雨',aqiInfo:'優(yōu)'},{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'優(yōu)'},{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'優(yōu)'}"
# 基于正則表達(dá)式使用findall函數(shù)
print(re.findall("tianqi:'(.*?)'", string8))
# 取出string9中所有含O字母的單詞
string9 = 'Together, we discovered that a free market only thrives when there are rules to ensure competition and fair play, Our celebration of initiative and enterprise'
# 基于正則表達(dá)式使用findall函數(shù)
print(re.findall('w*ow*',string9, flags = re.I))
# 將string10中的標(biāo)點符號、數(shù)字和字母刪除
string10 = '據(jù)悉,這次發(fā)運的4臺蒸汽冷凝罐屬于國際熱核聚變實驗堆(ITER)項目的核二級壓力設(shè)備,先后完成了壓力試驗、真空試驗、氦氣檢漏試驗、千斤頂試驗、吊耳載荷試驗、疊裝試驗等驗收試驗。'
# 基于正則表達(dá)式使用sub函數(shù)
print(re.sub('[,。、a-zA-Z0-9()]','',string10))
# 將string11中的每個子部分內(nèi)容分割開
string11 = '2室2廳 | 101.62平 | 低區(qū)/7層 | 朝南
上海未來 - 浦東 - 金楊 - 2005年建'
# 基于正則表達(dá)式使用split函數(shù)
split = re.split('[-|
]', string11)
print(split)
# 分割結(jié)果的清洗
split_strip = [i.strip() for i in split]
print(split_strip)
out:
['晴', '陰~小雨', '小雨~中雨', '中雨~小雨']
['Together', 'discovered', 'only', 'to', 'competition', 'Our', 'celebration', 'of']
據(jù)悉這次發(fā)運的臺蒸汽冷凝罐屬于國際熱核聚變實驗堆項目的核二級壓力設(shè)備先后完成了壓力試驗真空試驗氦氣檢漏試驗千斤頂試驗吊耳載荷試驗疊裝試驗等驗收試驗
['2室2廳 ', ' 101.62平 ', ' 低區(qū)/7層 ', ' 朝南 ', ' 上海未來 ', ' 浦東 ', ' 金楊 ', ' 2005年建']
['2室2廳', '101.62平', '低區(qū)/7層', '朝南', '上海未來', '浦東', '金楊', '2005年建']
如上結(jié)果所示:
第一個例子中通過正則表達(dá)式"tianqi:’(.*?)’“實現(xiàn)目標(biāo)數(shù)據(jù)的獲取,如果不使用括號的話,就會產(chǎn)生類似"tianqi:‘晴’”, "tianqi:‘陰~小雨’"這樣的值,所以,加上括號就是為了分組,且僅返回組中的內(nèi)容;
第二個例子并沒有將正則表達(dá)式寫入圓括號,如果寫上圓括號也是返回一樣的結(jié)果,所以findall就是用來返回滿足匹配條件的列表值,如果有括號,就僅返回括號內(nèi)的匹配值;
第三個例子使用替換的方法,將所有的標(biāo)點符號換為空字符,進(jìn)而實現(xiàn)刪除的效果;
第四個例子是對字符串的分割,如果直接按照正則 ‘[,。、a-zA-Z0-9()]’ 分割的話,返回的結(jié)果中包含空字符,如 ‘2室2廳’ 后面就有一個空字符。為了刪除列表中每個元素的首尾空字符,使用了列表表達(dá)式,并且結(jié)合字符串的strip方法完成空字符的壓縮。
總結(jié)
原文鏈接:https://blog.csdn.net/LXiaYu123456789/article/details/119148369
相關(guān)推薦
- 2022-08-23 iOS底層探索之自動釋放池原理解析_IOS
- 2022-10-12 排查服務(wù)器異常流量教程詳解_nginx
- 2022-08-16 python+pytest自動化測試函數(shù)測試類測試方法的封裝_python
- 2022-09-04 關(guān)于python?DataFrame的合并方法總結(jié)_python
- 2023-01-20 解決Building?wheel?for?wrapt?(setup.py)?...?error的問題
- 2022-11-22 在?React?項目中全量使用?Hooks的方法_React
- 2022-04-24 C語言浮點函數(shù)中的modf和fmod詳解_C 語言
- 2022-09-15 windows中cmd下添加、刪除和修改靜態(tài)路由實現(xiàn)_DOS/BAT
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支