python正則表達式及使用正則表達式的示例分析-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)python正則表達式及使用正則表達式的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)公司專注于成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴謹?shù)膽B(tài)度對待客戶,用專業(yè)的服務(wù)創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

正則表達式

正則表達用來匹配字符串

正則表達式匹配過程

  1. 依次拿出表達式和文本中的字符串進行比價

  2. 如果每個字符都能匹配,則匹配成功;一旦有匹配不成功的字符,則匹配失敗

  3. 如果有量詞和邊界,則匹配過程稍微有些不同

正則表達式語法規(guī)則

語法

說明

表達式實例

匹配字符串

字符

.匹配除換行"\n"外的任意字符串abcabc
\轉(zhuǎn)義字符,使后一個字符改變原來的意思a\\ca\c
[...]字符集,對應(yīng)的位置可以是字符集中任意字符,字符集中的字符可以逐個列出,也可以給出范圍,如[abc]或[a-c]。第一個字符如果是^則表示取反,如[^abc]表示不是abc中的其他字符。所有的特殊的字符在字符集中都失去其原有的特殊含義。在字符集中使用^、]或-,可以使用轉(zhuǎn)義字符匹配它們a[bcd]e

abe

ace

ade

預(yù)定義字符集

\d數(shù)字:[0-9]a\dca1c
\D非數(shù)字:[^0-9]a\Dcabc
\s空白字符:[<空格>\t\r\n\f\v]a\sca c
\S非空白字符:[^\s]a\Scabc
\w單詞字符:[a-zA-z0-9_]a\wcabc
\W非單詞字符:[^\w]a\Wca c

數(shù)量詞

*匹配一個字符串0或無限次abc*

ab

abc

abccc

+匹配一個字符串1次或無限次abc+

abc

abccc

?匹配一個字符串0次或1次

abc?

ab

abc

{m}匹配一個字符串m次abc{2}abcc
{m,n}匹配一個字符串m到n次abc{2,3}

abcc

abccc

邊界匹配

^匹配字符串開頭^abcabc
$匹配字符串末尾abc$abc
\A匹配字符串開始\Aabcabc
\Z匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串abc\Zabc
\b匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

\B匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

邏輯分組

|匹配|表達式左右的任意一個abc|def

abc

def

(...)作為分組,每遇到一個(,分組編號加1,使用分組的好處是匹配的子串會保存到一個子組,便于以后使用(abc){2}abcabc
(?P<name>...)分組除原有編號外,再加一個別名(?P<id>abc){2}abcabc
\<number>引用編號為number的分組匹配到的字符串(\d)ab\1

1ab1

5ab5

(?P=name)應(yīng)用別名為name的分組匹配到的字符串(?P<id>abc)ee(?P=name)abceeabc

特殊構(gòu)造(不分組)

(?:...)(...)的不分組版本,用于|或后接數(shù)量詞(?:abc){2}abcabc
(?iLmsux)iLmsux中的每個字符代表正則表達式的一種匹配模式,只能用在正則表達式開頭,可選多個(?i)abcAbC
(?#...)將#后面的字符當(dāng)做注釋忽略abc(?#comment)defabcdef
(?=...)之后的字符串表達式需要匹配才能成功,不消耗字符串內(nèi)容a(?=\d)后面是數(shù)字的a
(?!...)之后的字符串表達式需要不匹配才能成功,不消耗字符串內(nèi)容a(?!\d)后面不是數(shù)字的a
(?<=...)之前的字符串表達式需要匹配才能成功,不消耗字符串內(nèi)容(?<=\d)a

前面是數(shù)字的a

(?<!...)之前的字符串表達式需要不匹配才能成功,不消耗字符串內(nèi)容(?<!\d)a前面不是數(shù)字的a

(?(id/name)yes_

pattern|no_parttern)

如果匹配到分組為id或別名name的字符串成功匹配,則需要匹配yes_pattern

不成功,怎需要匹配no_pattern

(\d)abc(?(1)\d|def)

1abc3

abcdef

貪婪模式和非貪婪模式

貪婪模式是盡可能多的匹配字符串,python默認為貪婪模式,非貪婪模式盡可能少的匹配字符串,在正則表達式后面加個?表示非貪婪模式。例如:字符串a(chǎn)bcccb,貪婪模式正則表達式為ab.*c,非貪婪模式的正則表達式為ab.*?c,貪婪模式結(jié)果為abccc,非貪婪模式結(jié)果為abc,再比如字符串a(chǎn)bbb,貪婪模式正則表達式為ab?,非貪婪模式正則表達為ab??,貪婪模式結(jié)果為ab,非貪婪結(jié)果為a。

python的re模塊

re模塊的方法:

1.compile(pattern[,flag]):對正則表達式pattern進行編譯,編譯后比直接查找速度快

2.match(patter,string[,flag]):從字符串string的開始就匹配,若匹配成功,則返回匹配對象,否則返回None(None對象沒有g(shù)roup()和groups()方法,不判斷直接調(diào)用這兩個方法,則會出現(xiàn)異常)

3.search(pattern,string[,flag]):從字符串中查找,若匹配成功,則返回匹配對象,否則返回None

4.findall(pattern,string[,flag]):在字符串 string 中查找正則表達式模式 pattern 的所有(非重復(fù))出現(xiàn);返回一個匹配對象的列表

5.finditer(pattern,string[, flags])b 和 findall()相同,但返回的不是列表而是迭代器;對于每個匹配,該迭代器返回一個匹配對象

6.split(pattern,string, max=0) 根據(jù)正則表達式 pattern 中的分隔符把字符 string 分割為一個列表,返回成功匹配的列表,最多分割 max 次(默認是分割所有匹配的地方)

7.sub(pattern, repl, string, max=0) 把字符串 string 中所有匹配正則表達式 pattern 的地方替換成字符串 repl,如果 max 的值沒有給出, 則對所有匹配的地方進行替換

匹配對象的方法和屬性:

  1. string:匹配時所使用的文本

  2. re:匹配時使用的pattern對象

  3. group(num=0) 返回全部匹配對象(或指定編號是 num 的子組)

  4. groups() 返回一個包含全部匹配的子組的元組(如果沒有成功匹配,就返回一個空元組)

參數(shù)flag:

re.I使匹配對大小寫不敏感
re.L做本地化識別(locale-aware)匹配
re.M多行匹配,影響 ^ 和 $
re.S使 . 匹配包括換行在內(nèi)的所有字符
re.U根據(jù)Unicode字符集解析字符。這個標志影響 \w, \W, \b, \B.
re.X該標志通過給予你更靈活的格式以便你將正則表達式寫得更易于理解。

python使用正則表達式的例子

>>> import re
>>> pattern = re.compile(r'foo')
>>> res1 = re.search(pattern,'foo')
>>> res1.group() # 返回的是匹配對象,需要調(diào)用group()方法,顯示所有的匹配對象
'foo'
>>> res1.groups()# 因為沒有子組(即正則表達式中沒有分組),返回空元組
()
>>> res2 = re.findall(pattern,'foobbfoo')
>>> res2 # 直接返回的是一個列表,包含所有匹配的字符
['foo', 'foo']
>>> pattern2 = re.compile(r'(\d+)aa')
>>> res3 = re.search(pattern2,'bb32aa')
>>> res3.group() # 返回所有的匹配的對象
'32aa'
>>> res3.groups() # 對比res1的groups(),正則里有分組,返回匹配到的分組
('32',)
>>> res4 = re.findall(pattern2,'bb32aacc5aacc')
>>> res4 # 對比res2,返回一個列表,但只包含所匹配分組里面的字符,
['32', '5']

感謝各位的閱讀!關(guān)于“python正則表達式及使用正則表達式的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

本文題目:python正則表達式及使用正則表達式的示例分析-創(chuàng)新互聯(lián)
文章地址:http://muchs.cn/article16/djhedg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、企業(yè)建站、用戶體驗面包屑導(dǎo)航、軟件開發(fā)網(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ǎng)站優(yōu)化排名