Python正則表達(dá)式學(xué)習(xí)小例子
正則表達(dá)式是處理字符串的強(qiáng)大工具。作為一個(gè)概念而言,正則表達(dá)式對于Python來說并不是獨(dú)有的。但是,Python中的正則表達(dá)式在實(shí)際使用過程中還是有一些細(xì)小的差別。
(1)匹配1-100之間的數(shù)
import re s = '100' # 1-100內(nèi)的任意數(shù)字 ret = re.match(r'(100|[1-9]\d{0,1})$',s) print(ret.group())
(100|[1-9]\d{0,1})$
100可以匹配100 | 或者匹配[1-9]中的一個(gè)數(shù),然后后面\d是數(shù)字,后面的{0,1}匹配最多一個(gè)數(shù)字或沒有數(shù)字
[1-9]\d意思是只能是前面是1-9的任意數(shù)字主要是不包括0,否則01是不允許,后面是任意包括0。
(2)匹配座機(jī)號(hào)碼
010-67132692,其構(gòu)造規(guī)則為[3位數(shù)字][-][8位數(shù)字]
或者
0516-8978981,其構(gòu)造規(guī)則為[4位數(shù)字][-][7位數(shù)字]
import re s = "010-67132692" ret = re.search(r'^\d{3,4}-\d{7,8}$' , s) print(ret.group())
注意:print(ret.group(0)) 一樣的效果,python默認(rèn)可以0,不用()也可以獲取,一般php與js中都是\1開始
(3)對輸入的qq號(hào)進(jìn)行匹配(qq匹配規(guī)則:長度為5-10位,純數(shù)字組成,且不能以0開頭。)
import re s = "1101111123" ret = re.match(r'[1-9]\d{4,9}$' , s) if ret != None: print(ret.group()) else : print('匹配失敗!')
(4)查找字符串中有多少個(gè)af
import re s = "asdfjvjadsffvaadfkfasaffdsasdffadsafafsafdadsfaafd" ret = re.findall(r'(af)' , s) print(len(ret))
(5)規(guī)則是按照空格出現(xiàn)一次或者多次切割
import re s = "zhangsan lisi wangwu" res = re.compile(r'\s+') ret = res.split(s) print(ret)
效果圖:
(6)用正則\\切割
import re s = "c:\\abc\\a.txt" res = re.compile(r'\\') ret = res.split(s) print(ret)
效果圖:
(7)將連續(xù)5個(gè)以上數(shù)字替換成#
import re s = "wer8934605juo123wa89320571f" res = re.compile(r'\d{5,}') ret = res.sub('#' , s) print(ret)
效果圖:
(8)取出字符串中的所有字母
import re s = "abDEe23dJfd343dPOddfe4CdD5ccv!23rr" res = re.compile(r'[a-zA-Z]+') ret = res.findall(s) print(ret)
效果圖:
(9)找出以字母e結(jié)尾的單詞,忽略大小寫
import re s = 'THREE people at HERE do some THING' res = re.compile(r'\w+e\b' , re.I) #\b為邊界 ret = res.findall(s) print(ret)
效果圖:
(10)將多個(gè)重復(fù)字母替換成&
import re s = "cudddbhuuujdddcaa" res = re.compile(r'([a-zA-Z])\1+') ret = res.sub('&' , s) print(ret)
效果圖:
(11)將多個(gè)重復(fù)字母替換成一個(gè)字母(比如ddd替換成d)
import re s = "cudddbhuuujddd" res = re.compile(r'([a-zA-Z])\1+') ret = res.sub(r'\1',s) print(ret)
效果圖:
(12)獲取長度為3個(gè)字母的單詞
import re s = "min tian jiu yao fang jia le ,da jia" ret = re.findall(r'\b\w{3}\b' , s) print(ret)
效果圖:
(13)將字符串變成 '我要學(xué)編程'
import re s = "我我...我我...我要..要要...要要...學(xué)學(xué)學(xué)...學(xué)學(xué)...編編編..編程..程.程...程...程" res = re.sub(r'\W+','', s) ret = re.sub(r'(.)\1+',r'\1',res) print(ret)
效果圖:
(14)去掉div和b標(biāo)簽
結(jié)果:正則<span>表達(dá)式</span>練習(xí)
import re s = "<div class='a'>正則<span>表達(dá)式</span><b style='color:red'>練習(xí)</b></div>" ret = re.sub(r'(</?div.*?>|</?b.*?>)','',s) print(ret)
效果圖:
(15)找出每行中只有3個(gè)數(shù)字的字符串
import re s = '''121fefe 3qsqse2 ded6d32 aaaaa1a 1234adc ''' ret = re.findall(r'^\D*\d\D*\d\D*\d\D*$' , s ,re.M) print(ret)
效果圖:
以下是補(bǔ)充
收集一些常用的python正則練習(xí)
# 匹配出0-99之間的數(shù)字 print("---匹配出0-99之間的數(shù)字---") ret = re.match(r"^[1-9]?[0-9]$","77") print(ret.group()) # 8到20位的密碼,可以是⼤⼩寫英⽂字⺟、數(shù)字、下劃線 print("---,8到20位的密碼,可以是⼤⼩寫英⽂字⺟、數(shù)字、下劃線---") ret = re.match("[\w_]{8,20}","1123dasf1") print(ret.group()) # 匹配出163的郵箱地址,且@符號(hào)之前有4到 20位,例如hello@163.com print("---匹配出163的郵箱地址,且@符號(hào)之前有4到 20位,例如hello@163.com---") ret = re.match("[\w_]{4,20}@163\.com","evan_qb@163.com") print(ret.group()) print("---b---") ret = re.match(r".*\b163\b","evan_qb@163.com") print(ret.group()) # 匹配1-100之間的數(shù) print("---匹配1-100之間的數(shù)---") ret = re.match("[1-9]?\d$|100","100") print(ret.group()) # 匹配163、126、qq郵箱 print("---匹配163、126、qq郵箱---") ret = re.match("[\w_]{4,20}@(163|126|qq)\.com","123342@126.com") print(ret.group()) # 匹配<html>hello world</html> print("---匹配<html>hello world</html>---") ret = re.match(r"<([a-zA-Z]*)>.*</\1>","<html>hello world</html>") print(ret.group()) # 第一種:匹配出<html><h1>www.itcast.cn</h1></html> print("---第一種:匹配出<html><h1>www.qblank.cn</h1></html>---") ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>","<html><h1>www.itcast.cn</h1></html>") print(ret.group()) # 第二種: 匹配出<html><h1>www.qblank.cn</h1></html> print("---第二種: 匹配出<html><h1>www.qblank.cn</h1></html>") ret = re.match("<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>","<html><h1>www.qblank.cn</h1></html>") print(ret.group()) # ******re模塊的高級(jí)用法***** # 使用search匹配文章的閱讀的次數(shù) print("---匹配文章的閱讀的次數(shù)---") ret = re.search(r"\d+","閱讀次數(shù)為 9999") print(ret.group()) # 統(tǒng)計(jì)出python、c、c++相應(yīng)⽂章閱讀的次數(shù) print("---統(tǒng)計(jì)出python、c、c++相應(yīng)⽂章閱讀的次數(shù)---") ret = re.findall(r"\d+","python = 2342,c = 7980,java = 9999") print(ret) # 將匹配到的閱讀次數(shù)加1 print("---將匹配到的閱讀次數(shù)加1---") ret = re.sub(r"\d+","999","python = 997") print(ret) # <div> # <p>崗位職責(zé):</p> # <p>完成推薦算法、數(shù)據(jù)統(tǒng)計(jì)、接⼝、后臺(tái)等服務(wù)器端相關(guān)⼯作</p> # <p><br></p> <p>必備要求:</p> <p>良好的⾃我驅(qū)動(dòng)⼒和職業(yè)素養(yǎng),⼯作積極主動(dòng)、結(jié)果導(dǎo)向</p> # <p> <br></p> <p>技術(shù)要求:</p> # <p>1、⼀年以上 Python 開發(fā)經(jīng)驗(yàn),掌握⾯向?qū)ο蠓治龊驮O(shè)計(jì),了解設(shè)計(jì)模式</p > # <p>2、掌握HTTP協(xié)議,熟悉MVC、MVVM等概念以及相關(guān)WEB開發(fā)框架</p> # <p>3、掌握關(guān)系數(shù)據(jù)庫開發(fā)設(shè)計(jì),掌握 SQL,熟練使⽤ MySQL/PostgreSQL 中 的⼀種<br></p> # <p>4、掌握NoSQL、MQ,熟練使⽤對應(yīng)技術(shù)解決⽅案</p> # <p>5、熟悉 Javascript/CSS/HTML5,JQuery、React、Vue.js</p> # <p> <br></p> <p>加分項(xiàng):</p> # <p>⼤數(shù)據(jù),數(shù)理統(tǒng)計(jì),機(jī)器學(xué)習(xí),sklearn,⾼性能,⼤并發(fā)。</p> # </div> data = """ <div> <p>崗位職責(zé):</p> <p>完成推薦算法、數(shù)據(jù)統(tǒng)計(jì)、接⼝、后臺(tái)等服務(wù)器端相關(guān)⼯作</p> <p><br></p> <p>必備要求:</p> <p>良好的⾃我驅(qū)動(dòng)⼒和職業(yè)素養(yǎng),⼯作積極主動(dòng)、結(jié)果導(dǎo)向</p> <p> <br></p> <p>技術(shù)要求:</p> <p>1、⼀年以上 Python 開發(fā)經(jīng)驗(yàn),掌握⾯向?qū)ο蠓治龊驮O(shè)計(jì),了解設(shè)計(jì)模式</p > <p>2、掌握HTTP協(xié)議,熟悉MVC、MVVM等概念以及相關(guān)WEB開發(fā)框架</p> <p>3、掌握關(guān)系數(shù)據(jù)庫開發(fā)設(shè)計(jì),掌握 SQL,熟練使⽤ MySQL/PostgreSQL 中 的⼀種<br></p> <p>4、掌握NoSQL、MQ,熟練使⽤對應(yīng)技術(shù)解決⽅案</p> <p>5、熟悉 Javascript/CSS/HTML5,JQuery、React、Vue.js</p> <p> <br></p> <p>加分項(xiàng):</p> <p>⼤數(shù)據(jù),數(shù)理統(tǒng)計(jì),機(jī)器學(xué)習(xí),sklearn,⾼性能,⼤并發(fā)。</p> </div> """ print("---爬取就業(yè)信息網(wǎng)址---") # 方法一:關(guān)閉貪婪模式 print("---方法一---") ret = re.sub(r"<.+?>","",data) print(ret) # 方法二: print("---方法二---") ret = re.sub(r"</?\w+>","",data) print(ret) # 切割字符串“info:xiaoZhang 33 shandong” print("---切割字符串“info:xiaoZhang 33 shandong”---") ret = re.split(r":|","切割字符串info:xiaoZhang 33 shandong") print(ret) # This is a number 234-235-22-423 data = "This is a number 234-235-22-423" print("---貪婪和非貪婪---") # 貪婪 ret = re.match(".+(\d+-\d+-\d+-\d+)",data) print(ret.group(1)) # 非貪婪 ret = re.match(".+?(\d+-\d+-\d+-\d+)",data) print(ret.group(1)) # 提取圖片的url data = """ <img data-original="https://rpic.douyucdn.cn/appCovers/2016/1 1/13/1213973_201611131917_small.jpg" src="https://rpic.douyuc dn.cn/appCovers/2016/11/13/1213973_201611131917_small.jpg" style="display:inline;"> """ print("---提取圖片的url") ret = re.search(r"https.+?\.jpg",data) print(ret.group()) data = """ http://www.interoem.com/messageinfo.asp?id=35 http://3995503.com/class/class09/news_show.asp?id=14 http://lib.wzmc.edu.cn/news/onews.asp?id=769 http://www.zy-ls.com/alfx.asp?newsid=377&id=6 http://www.fincm.com/newslist.asp?id=415 """ # 去掉后綴 print("---去掉后綴---") ret = re.sub(r"(http://.+?/).*", lambda x: x.group(1),data) print(ret) # 找出所有單詞 data = "hello world ha ha" print("---找出所有單詞---") print("--方法一--") ret = re.split(r" +",data) print(ret) print("--方法二--") ret = re.findall(r"\b[a-zA-Z]+\b",data) print(ret)
到此這篇關(guān)于Python正則表達(dá)式學(xué)習(xí)小例子的文章就介紹到這了,更多相關(guān)Python正則學(xué)習(xí)例子內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中l(wèi)xml.etree 和 ElementTree 的區(qū)別解析
lxml.etree 提供了更多的功能,例如 XPath、XSLT、Relax NG、 和 XML 模式支持,etree 對 Python unicode 字符串的想法與 ElementTree 不同,本文給大家介紹python中l(wèi)xml.etree 和 ElementTree 的區(qū)別,感興趣的朋友一起看看吧2024-01-01python list轉(zhuǎn)矩陣的實(shí)例講解
今天小編就為大家分享一篇python list轉(zhuǎn)矩陣的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08python批量將excel內(nèi)容進(jìn)行翻譯寫入功能
這篇文章主要介紹了python批量將excel內(nèi)容進(jìn)行翻譯寫入功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10日常整理python執(zhí)行系統(tǒng)命令的常見方法(全)
本文是小編日常整理的些關(guān)于python執(zhí)行系統(tǒng)命令常見的方法,比較全面,特此通過腳本之家這個(gè)平臺(tái)把此篇文章分享給大家供大家參考2015-10-10Python數(shù)據(jù)分析中Groupby用法之通過字典或Series進(jìn)行分組的實(shí)例
下面小編就為大家分享一篇Python數(shù)據(jù)分析中Groupby用法之通過字典或Series進(jìn)行分組的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12Python 實(shí)現(xiàn)一個(gè)計(jì)時(shí)器
這篇文章主要介紹了Python 實(shí)現(xiàn)一個(gè)計(jì)時(shí)器的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07Python 數(shù)據(jù)結(jié)構(gòu)之隊(duì)列的實(shí)現(xiàn)
這篇文章主要介紹了Python 數(shù)據(jù)結(jié)構(gòu)之隊(duì)列的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-01-01