python正則表達(dá)式舉例分析

這篇文章主要講解了“python正則表達(dá)式舉例分析”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python正則表達(dá)式舉例分析”吧!

成都創(chuàng)新互聯(lián)公司專注于中大型企業(yè)的成都網(wǎng)站建設(shè)、做網(wǎng)站和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶上1000+,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運用,我們將一直專注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長!

請嘗試計算字符串四則運算式。注意代碼內(nèi)可使用2個數(shù)的±*/,但不能用python的表達(dá)式功能運算表達(dá)式,也不能用eval函數(shù)運算。字符串四則運算式示例如下:

compute = '10-3*(20-10+(-10/5)*27/3/3-(-100)/(10-3*5))+(-2.5*-12)'

練習(xí)第一步,匹配數(shù)字:

匹配數(shù)字(含正整數(shù)、負(fù)整數(shù)、正浮點數(shù)、負(fù)浮點數(shù)):

-?\d+(\.\d+)?

可以測試匹配123、-123、1.23、-1.23均成功。

表達(dá)式解析

-?表示匹配-,?表示0個或1個。

\d+表示匹配數(shù)字,+表示1個或多個。

(\.\d+)?這部分最復(fù)雜,一步步來解釋。括號內(nèi)是\.表示匹配小數(shù)點(若不加\則會匹配為除換行符外任意字符);\d+同上;一對圓括號后面跟?表示這些內(nèi)容可能不出現(xiàn)或出現(xiàn)1次,意思是可以匹配小數(shù)點及后面1個或多個數(shù)字也匹配無小數(shù)點及后面的數(shù)字。

上述正則表達(dá)式經(jīng)站長工具網(wǎng)站測試沒有問題,但是在python中代碼中會有問題,請看下面的代碼示例:

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)驗證過是正確的,為什么會提取不到數(shù)字呢?

這其中的原因是因為分組概念沖突!正則表達(dá)式的分組使用圓括號表示,而re模塊的分組也使用圓括號表示,請認(rèn)真理解這2種分組概念是不同的之處,非常重要!?。?/p>

正則表達(dá)式的分組是把某一段表達(dá)式進(jìn)行整體包裝,然后可對該整體做操作,如或|和范圍.?*{m,n}。

re模塊的分組是指對正則表達(dá)式匹配的內(nèi)容再次篩選,只需要分組內(nèi)匹配的部分內(nèi)容。

解決方法是對正則表達(dá)式的分組左括號后面加?:實施分組隱藏,告訴python解釋器這個分組不是使用再次篩選的意思。

練習(xí)第二步,匹配內(nèi)層括號中的內(nèi)容

接下來嘗試匹配四則運算字符串中內(nèi)層括號之中的內(nèi)容:

compute = '10-3*(20-10+(-10/5)*27/3/3-(-100)/(10-3*5))+(-5*-6)'

匹配最內(nèi)層括號

\([\d.*/±]+?\)

在站長工具網(wǎng)站測試可以成功匹配出以下內(nèi)容:

(-10/5)、(-100)、(10-3*5)、(-5*-6)

表達(dá)式解析

先匹配外面的圓括號,注意都要用\轉(zhuǎn)義,然后觀察目標(biāo)字符串的規(guī)律填寫括號中的內(nèi)容。

括號中可以有的字符集是數(shù)字、小數(shù)點、加、減、乘、除,可以出現(xiàn)1次或多次,注意必須加在量詞+后面寫?標(biāo)識為最短匹配。

再到python中測試正則表達(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)']

練習(xí)第三步,編寫計算字符串四則運算式代碼

寫代碼以前我以為頂多半個小時搞定,結(jié)果被打臉了。寫代碼用了不到半個小時,調(diào)試用了一個多小時!前后2個小時才搞定。真的是看著容易做起來難!建議學(xué)python的朋友嘗試做一下這個練習(xí)。做這個練習(xí)對于掌握正則表達(dá)式和鍛煉編程能力很有幫助。

編程思路、代碼、調(diào)試過程我決定過幾天再公布。今天先貼一張運算結(jié)果的圖。
python正則表達(dá)式舉例分析

感謝各位的閱讀,以上就是“python正則表達(dá)式舉例分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對python正則表達(dá)式舉例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

分享名稱:python正則表達(dá)式舉例分析
文章起源:http://muchs.cn/article20/ihjdjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司、品牌網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)站制作、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管