国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python正則表達(dá)式及使用正則表達(dá)式的例子

2020-01-04 16:03:18
字體:
供稿:網(wǎng)友

正則表達(dá)式

正則表達(dá)用來匹配字符串

正則表達(dá)式匹配過程

  1. 依次拿出表達(dá)式和文本中的字符串進(jìn)行比價(jià)
  2. 如果每個(gè)字符都能匹配,則匹配成功;一旦有匹配不成功的字符,則匹配失敗
  3. 如果有量詞和邊界,則匹配過程稍微有些不同

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

 

語法

說明

表達(dá)式實(shí)例

匹配字符串

字符

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

abe

ace

ade

預(yù)定義字符集

/d 數(shù)字:[0-9] a/dc a1c
/D 非數(shù)字:[^0-9] a/Dc abc
/s 空白字符:[<空格>/t/r/n/f/v] a/sc a c
/S 非空白字符:[^/s] a/Sc abc
/w 單詞字符:[a-zA-z0-9_] a/wc abc
/W 非單詞字符:[^/w] a/Wc a c

數(shù)量詞

* 匹配一個(gè)字符串0或無限次 abc*

ab

abc

abccc

+ 匹配一個(gè)字符串1次或無限次 abc+

abc

abccc

? 匹配一個(gè)字符串0次或1次

abc?

ab

abc

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

abcc

abccc

邊界匹配

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

邏輯分組

| 匹配|表達(dá)式左右的任意一個(gè) abc|def

abc

def

(...) 作為分組,每遇到一個(gè)(,分組編號(hào)加1,使用分組的好處是匹配的子串會(huì)保存到一個(gè)子組,便于以后使用 (abc){2} abcabc
(?P<name>...) 分組除原有編號(hào)外,再加一個(gè)別名 (?P<id>abc){2} abcabc
/<number> 引用編號(hào)為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中的每個(gè)字符代表正則表達(dá)式的一種匹配模式,只能用在正則表達(dá)式開頭,可選多個(gè) (?i)abc AbC
(?#...) 將#后面的字符當(dāng)做注釋忽略 abc(?#comment)def abcdef
(?=...) 之后的字符串表達(dá)式需要匹配才能成功,不消耗字符串內(nèi)容 a(?=/d) 后面是數(shù)字的a
(?!...) 之后的字符串表達(dá)式需要不匹配才能成功,不消耗字符串內(nèi)容 a(?!/d) 后面不是數(shù)字的a
(?<=...) 之前的字符串表達(dá)式需要匹配才能成功,不消耗字符串內(nèi)容 (?<=/d)a

前面是數(shù)字的a

(?<!...) 之前的字符串表達(dá)式需要不匹配才能成功,不消耗字符串內(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默認(rèn)為貪婪模式,非貪婪模式盡可能少的匹配字符串,在正則表達(dá)式后面加個(gè)?表示非貪婪模式。例如:字符串a(chǎn)bcccb,貪婪模式正則表達(dá)式為ab.*c,非貪婪模式的正則表達(dá)式為ab.*?c,貪婪模式結(jié)果為abccc,非貪婪模式結(jié)果為abc,再比如字符串a(chǎn)bbb,貪婪模式正則表達(dá)式為ab?,非貪婪模式正則表達(dá)為ab??,貪婪模式結(jié)果為ab,非貪婪結(jié)果為a。

python的re模塊

re模塊的方法:

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

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

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

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

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

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

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

匹配對(duì)象的方法和屬性:

  1. string:匹配時(shí)所使用的文本
  2. re:匹配時(shí)使用的pattern對(duì)象
  3. group(num=0) 返回全部匹配對(duì)象(或指定編號(hào)是 num 的子組)
  4. groups() 返回一個(gè)包含全部匹配的子組的元組(如果沒有成功匹配,就返回一個(gè)空元組)

參數(shù)flag:

 

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

 

python使用正則表達(dá)式的例子

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

總結(jié)

以上所述是小編給大家介紹的python正則表達(dá)式及使用正則表達(dá)式的例子,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)VEVB武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到python教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 兴业县| 德化县| 全椒县| 大姚县| 邳州市| 仲巴县| 长治县| 西乌珠穆沁旗| 云林县| 安龙县| 南部县| 青冈县| 剑川县| 沽源县| 卢湾区| 司法| 五家渠市| 永登县| 蒙阴县| 宝应县| 博罗县| 科技| 清徐县| 扎囊县| 博爱县| 同江市| 咸丰县| 司法| 玉林市| 台南市| 屏东县| 家居| 日照市| 同德县| 任丘市| 南岸区| 怀柔区| 邳州市| 固安县| 江都市| 马尔康县|