這篇文章主要講解了“python正則表達(dá)式舉例分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“python正則表達(dá)式舉例分析”吧!
成都創(chuàng)新互聯(lián)公司專(zhuān)注于中大型企業(yè)的成都網(wǎng)站建設(shè)、做網(wǎng)站和網(wǎng)站改版、網(wǎng)站營(yíng)銷(xiāo)服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開(kāi)發(fā)的融合,累計(jì)客戶(hù)上1000+,服務(wù)滿(mǎn)意度達(dá)97%。幫助廣大客戶(hù)順利對(duì)接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專(zhuān)注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開(kāi)發(fā),在前進(jìn)的路上,與客戶(hù)一起成長(zhǎng)!
請(qǐng)嘗試計(jì)算字符串四則運(yùn)算式。注意代碼內(nèi)可使用2個(gè)數(shù)的±*/,但不能用python的表達(dá)式功能運(yùn)算表達(dá)式,也不能用eval函數(shù)運(yùn)算。字符串四則運(yùn)算式示例如下:
compute = '10-3*(20-10+(-10/5)*27/3/3-(-100)/(10-3*5))+(-2.5*-12)'
匹配數(shù)字(含正整數(shù)、負(fù)整數(shù)、正浮點(diǎn)數(shù)、負(fù)浮點(diǎn)數(shù)):
-?\d+(\.\d+)?
可以測(cè)試匹配123、-123、1.23、-1.23均成功。
表達(dá)式解析:
-?表示匹配-,?表示0個(gè)或1個(gè)。
\d+表示匹配數(shù)字,+表示1個(gè)或多個(gè)。
(\.\d+)?這部分最復(fù)雜,一步步來(lái)解釋。括號(hào)內(nèi)是\.表示匹配小數(shù)點(diǎn)(若不加\則會(huì)匹配為除換行符外任意字符);\d+同上;一對(duì)圓括號(hào)后面跟?表示這些內(nèi)容可能不出現(xiàn)或出現(xiàn)1次,意思是可以匹配小數(shù)點(diǎn)及后面1個(gè)或多個(gè)數(shù)字也匹配無(wú)小數(shù)點(diǎn)及后面的數(shù)字。
上述正則表達(dá)式經(jīng)站長(zhǎng)工具網(wǎng)站測(cè)試沒(méi)有問(wèn)題,但是在python中代碼中會(huì)有問(wèn)題,請(qǐng)看下面的代碼示例:
num1 = 'The number is 123 ?'num2 = 'The number is -123 ?'num3 = 'The number is 1.23 ?'num4 = 'The number is -123 ?'dig1 = re.compile('-?\d+(\.\d+)?')dig2 = re.compile('-?\d+(?:\.\d+)?')print(dig1.findall(num1))print(dig1.findall(num2))print(dig1.findall(num3))print(dig1.findall(num4))print(dig2.findall(num1))print(dig2.findall(num2))print(dig2.findall(num3))print(dig2.findall(num4))out:['']['']['.23']['']['123']['-123']['1.23']['-123']
認(rèn)真閱讀代碼,可以看到findall函數(shù)使用dig1正則表達(dá)式字符串提取不到數(shù)字,而dig1正則表達(dá)式明明已經(jīng)驗(yàn)證過(guò)是正確的,為什么會(huì)提取不到數(shù)字呢?
這其中的原因是因?yàn)榉纸M概念沖突!正則表達(dá)式的分組使用圓括號(hào)表示,而re模塊的分組也使用圓括號(hào)表示,請(qǐng)認(rèn)真理解這2種分組概念是不同的之處,非常重要?。?!
正則表達(dá)式的分組是把某一段表達(dá)式進(jìn)行整體包裝,然后可對(duì)該整體做操作,如或|和范圍.?*{m,n}。
re模塊的分組是指對(duì)正則表達(dá)式匹配的內(nèi)容再次篩選,只需要分組內(nèi)匹配的部分內(nèi)容。
解決方法是對(duì)正則表達(dá)式的分組左括號(hào)后面加?:實(shí)施分組隱藏,告訴python解釋器這個(gè)分組不是使用再次篩選的意思。
接下來(lái)嘗試匹配四則運(yùn)算字符串中內(nèi)層括號(hào)之中的內(nèi)容:
compute = '10-3*(20-10+(-10/5)*27/3/3-(-100)/(10-3*5))+(-5*-6)'
匹配最內(nèi)層括號(hào):
\([\d.*/±]+?\)
在站長(zhǎng)工具網(wǎng)站測(cè)試可以成功匹配出以下內(nèi)容:
(-10/5)、(-100)、(10-3*5)、(-5*-6)
表達(dá)式解析:
先匹配外面的圓括號(hào),注意都要用\轉(zhuǎn)義,然后觀(guān)察目標(biāo)字符串的規(guī)律填寫(xiě)括號(hào)中的內(nèi)容。
括號(hào)中可以有的字符集是數(shù)字、小數(shù)點(diǎn)、加、減、乘、除,可以出現(xiàn)1次或多次,注意必須加在量詞+后面寫(xiě)?標(biāo)識(shí)為最短匹配。
再到python中測(cè)試正則表達(dá)式。
compute = '10-3*(20-10+(-10/5)*27/3/3-(-100)/(10-3*5))+(-5*-6)'result = re.findall('\([\d\.*/+-]+?\)', compute)print(result)out:['(-10/5)', '(-100)', '(10-3*5)', '(-5*-6)']
寫(xiě)代碼以前我以為頂多半個(gè)小時(shí)搞定,結(jié)果被打臉了。寫(xiě)代碼用了不到半個(gè)小時(shí),調(diào)試用了一個(gè)多小時(shí)!前后2個(gè)小時(shí)才搞定。真的是看著容易做起來(lái)難!建議學(xué)python的朋友嘗試做一下這個(gè)練習(xí)。做這個(gè)練習(xí)對(duì)于掌握正則表達(dá)式和鍛煉編程能力很有幫助。
編程思路、代碼、調(diào)試過(guò)程我決定過(guò)幾天再公布。今天先貼一張運(yùn)算結(jié)果的圖。
感謝各位的閱讀,以上就是“python正則表達(dá)式舉例分析”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)python正則表達(dá)式舉例分析這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
分享名稱(chēng):python正則表達(dá)式舉例分析
文章起源:http://chinadenli.net/article20/ihjdjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、品牌網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)站制作、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)