Python正則表達(dá)式用法詳解

搞懂Python 正則表達(dá)式用法

Python 正則表達(dá)式

正則表達(dá)式是一個特殊的字符序列劈伴,它能幫助你方便的檢查一個字符串是否與某種模式匹配衩藤。

Python 自1.5版本起增加了re 模塊,它提供 Perl 風(fēng)格的正則表達(dá)式模式溃卡。

re 模塊使 Python 語言擁有全部的正則表達(dá)式功能烂翰。

compile 函數(shù)根據(jù)一個模式字符串和可選的標(biāo)志參數(shù)生成一個正則表達(dá)式對象。該對象擁有一系列方法用于正則表達(dá)式匹配和替換休溶。

re 模塊也提供了與這些方法功能完全一致的函數(shù)代赁,這些函數(shù)使用一個模式字符串做為它們的第一個參數(shù)。

正則表達(dá)式模式

模式字符串使用特殊的語法來表示一個正則表達(dá)式:

字母和數(shù)字表示他們自身兽掰。一個正則表達(dá)式模式中的字母和數(shù)字匹配同樣的字符串芭碍。

多數(shù)字母和數(shù)字前加一個反斜杠時會擁有不同的含義。

標(biāo)點符號只有被轉(zhuǎn)義時才匹配自身孽尽,否則它們表示特殊的含義窖壕。

反斜杠本身需要使用反斜杠轉(zhuǎn)義。

由于正則表達(dá)式通常都包含反斜杠,所以你最好使用原始字符串來表示它們瞻讽。模式元素(如 r'\t'鸳吸,等價于 '\\t')匹配相應(yīng)的特殊字符。

下表列出了正則表達(dá)式模式語法中的特殊元素速勇。如果你使用模式的同時提供了可選的標(biāo)志參數(shù)晌砾,某些模式元素的含義會改變。

模式

描述


^匹配字符串的開頭

$匹配字符串的末尾烦磁。

.匹配任意字符养匈,除了換行符,當(dāng)re.DOTALL標(biāo)記被指定時都伪,則可以匹配包括換行符的任意字符呕乎。

[...]用來表示一組字符,單獨(dú)列出:[amk] 匹配 'a','m'或'k'

[^...]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符陨晶。

re*匹配0個或多個的表達(dá)式猬仁。

re+匹配1個或多個的表達(dá)式。

re?匹配0個或1個由前面的正則表達(dá)式定義的片段珍逸,非貪婪方式

re{ n}精確匹配 n 個前面表達(dá)式逐虚。例如,?o{2}?不能匹配 "Bob" 中的 "o"谆膳,但是能匹配 "food" 中的兩個 o。

re{ n,}匹配 n 個前面表達(dá)式撮躁。例如漱病, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o把曼。"o{1,}" 等價于 "o+"杨帽。"o{0,}" 則等價于 "o*"。

re{ n, m}匹配 n 到 m 次由前面的正則表達(dá)式定義的片段嗤军,貪婪方式

a| b匹配a或b

(re)匹配括號內(nèi)的表達(dá)式注盈,也表示一個組

(?imx)正則表達(dá)式包含三種可選標(biāo)志:i, m, 或 x 。只影響括號中的區(qū)域叙赚。

(?-imx)正則表達(dá)式關(guān)閉 i, m, 或 x 可選標(biāo)志老客。只影響括號中的區(qū)域。

(?: re)類似 (...), 但是不表示一個組

(?imx: re)在括號中使用i, m, 或 x 可選標(biāo)志

(?-imx: re)在括號中不使用i, m, 或 x 可選標(biāo)志

(?#...)注釋.

(?= re)前向肯定界定符震叮。如果所含正則表達(dá)式,以 ... 表示贪薪,在當(dāng)前位置成功匹配時成功槽唾,否則失敗忘闻。但一旦所含表達(dá)式已經(jīng)嘗試炼吴,匹配引擎根本沒有提高涮瞻;模式的剩余部分還要嘗試界定符的右邊宁否。

(?! re)前向否定界定符絮重。與肯定界定符相反号杠;當(dāng)所含表達(dá)式不能在字符串當(dāng)前位置匹配時成功

(?> re)匹配的獨(dú)立模式晓勇,省去回溯。

\w匹配字母數(shù)字及下劃線

\W匹配非字母數(shù)字及下劃線

\s匹配任意空白字符绑咱,等價于[\t\n\r\f].

\S匹配任意非空字符

\d匹配任意數(shù)字绰筛,等價于[0-9].

\D匹配任意非數(shù)字

\A匹配字符串開始

\Z匹配字符串結(jié)束,如果是存在換行描融,只匹配到換行前的結(jié)束字符串铝噩。

\z匹配字符串結(jié)束

\G匹配最后匹配完成的位置。

\b匹配一個單詞邊界窿克,也就是指單詞和空格間的位置薄榛。例如, 'er\b' 可以匹配"never" 中的 'er'让歼,但不能匹配 "verb" 中的 'er'。

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

\n, \t, 等.匹配一個換行符补箍。匹配一個制表符改执。等

\1...\9匹配第n個分組的內(nèi)容。

\10匹配第n個分組的內(nèi)容坑雅,如果它經(jīng)匹配辈挂。否則指的是八進(jìn)制字符碼的表達(dá)式。

正則表達(dá)式實例

字符匹配

實例

描述


python匹配"python".

字符類

實例

描述


[Pp]ython匹配 "Python" 或"python"

rub[ye]匹配 "ruby" 或"rube"

[aeiou]匹配中括號內(nèi)的任意一個字母

[0-9]匹配任何數(shù)字裹粤。類似于[0123456789]

[a-z]匹配任何小寫字母

[A-Z]匹配任何大寫字母

[a-zA-Z0-9]匹配任何字母及數(shù)字

[^aeiou]除了aeiou字母以外的所有字符

[^0-9]匹配除了數(shù)字外的字符

特殊字符類

實例

描述


.匹配除 "\n" 之外的任何單個字符终蒂。要匹配包括 '\n' 在內(nèi)的任何字符,請使用象 '[.\n]' 的模式。

\d匹配一個數(shù)字字符拇泣。等價于 [0-9]噪叙。

\D匹配一個非數(shù)字字符。等價于 [^0-9]霉翔。

\s匹配任何空白字符睁蕾,包括空格、制表符债朵、換頁符等等子眶。等價于 [ \f\n\r\t\v]。

\S匹配任何非空白字符序芦。等價于 [^ \f\n\r\t\v]臭杰。

\w匹配包括下劃線的任何單詞字符。等價于'[A-Za-z0-9_]'芝加。

\W匹配任何非單詞字符硅卢。等價于 '[^A-Za-z0-9_]'。

re模塊

1.Re模塊簡介

re模塊是python中處理正則表達(dá)式的一個模塊藏杖,通過re模塊的方法将塑,把正則表達(dá)式pattern編譯成正則對象,以便使用正則對象的方法

效率問題:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time ? ?:

2018/4/29 22:02# @Author ?: Feng Xiaoqing# @File ? ?: test.py# @Function:

-----------import reimporttimeit


print(timeit.timeit(setup='''import re; reg =

re.compile('<(?P\w*)>.*')''', stmt='''reg.match('

xxx

')''', number=1000000))


print(timeit.timeit(setup='''import re''', stmt='''re.match('<(?P\w*)>.*',

'

xxx

')''', number=1000000))



reg = re.compile('<(?P\w*)>.*')


reg.match('

xxx

')

執(zhí)行結(jié)果:

0.42296138327572711.0246964437151256

常用方法:先申明一個正則對象蝌麸,在通過正則對象去匹配点寥。這樣的效率高。

1 re.compile(pattern[, flags])方法

re.I(re.IGNORECASE): 忽略大小寫(括號內(nèi)是完整寫法来吩,下同)

M(MULTILINE): 多行模式敢辩,改變'^'和'$'的行為

S(DOTALL): 點任意匹配模式,改變'.'的行為

L(LOCALE): 使預(yù)定字符類 \w \W \b \B \s \S 取決于當(dāng)前區(qū)域設(shè)定

U(UNICODE): 使預(yù)定字符類 \w \W \b \B \s \S \d \D 取決于unicode定義的字符屬性

X(VERBOSE): 詳細(xì)模式弟疆。這個模式下正則表達(dá)式可以是多行戚长,忽略空白字符,并可以加入注釋怠苔。以下兩個正則表達(dá)式是等價的:

compile 函數(shù)用于編譯正則表達(dá)式同廉,生成一個正則表達(dá)式( Pattern )對象,供 match() 和 search() 這兩個函數(shù)使用柑司。

語法格式為:

re.compile(pattern[, flags])

參數(shù):

[if !supportLists]·??????????????????[endif]pattern?: 一個字符串形式的正則表達(dá)式

[if !supportLists]·??????????????????[endif]flags?: 可選迫肖,表示匹配模式,比如忽略大小寫攒驰,多行模式等蟆湖,具體參數(shù)為:

[if !supportLists]1.??????????????????????[endif]re.I忽略大小寫

[if !supportLists]2.??????????????????????[endif]re.L表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境

[if !supportLists]3.??????????????????????[endif]re.M多行模式

[if !supportLists]4.??????????????????????[endif]re.S即為?.?并且包括換行符在內(nèi)的任意字符(.?不包括換行符)

[if !supportLists]5.??????????????????????[endif]re.U表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫

[if !supportLists]6.??????????????????????[endif]re.X為了增加可讀性,忽略空格和?#?后面的注釋

實例

>>>import re>>> pattern =

re.compile(r'\d+') ? ? ? ? ? ? ? ? ? ?# 用于匹配至少一個數(shù)字>>>m = pattern.match('one12twothree34four') ?

? ? ?# 查找頭部玻粪,沒有匹配>>> print mNone>>> m =

pattern.match('one12twothree34four', 2, 10) # 從'e'的位置開始匹配隅津,沒有匹配>>> print mNone>>> m =

pattern.match('one12twothree34four', 3, 10) # 從'1'的位置開始匹配诬垂,正好匹配>>> print m ?


? ? ? ? ? ? ? ? # 返回一個 Match 對象<_sre.SRE_Match

object at 0x10a42aac0>>>> m.group(0) ? # 可省略 0'12'>>> m.start(0) ? # 可省略 03>>> m.end(0) ?

? # 可省略 05>>> m.span(0) ? ?# 可省略 0(3, 5)

在上面,當(dāng)匹配成功時返回一個 Match 對象饥瓷,其中:

[if !supportLists]·??????????????????[endif]group([group1, …])?方法用于獲得一個或多個分組匹配的字符串剥纷,當(dāng)要獲得整個匹配的子串時,可直接使用?group()或?group(0)呢铆;

[if !supportLists]·??????????????????[endif]start([group])方法用于獲取分組匹配的子串在整個字符串中的起始位置(子串第一個字符的索引)晦鞋,參數(shù)默認(rèn)值為0;

[if !supportLists]·??????????????????[endif]end([group])方法用于獲取分組匹配的子串在整個字符串中的結(jié)束位置(子串最后一個字符的索引+1)棺克,參數(shù)默認(rèn)值為0悠垛;

[if !supportLists]·??????????????????[endif]span([group])?方法返回?(start(group),

end(group))。

再看看一個例子:

實例

>>>import re>>> pattern = re.compile(r'([a-z]+)

([a-z]+)', re.I) ? # re.I 表示忽略大小寫>>> m =

pattern.match('Hello World Wide Web')>>> print m ?


? ? ? # 匹配成功娜谊,返回一個 Match 對象<_sre.SRE_Match object at0x10bea83e8>>>> m.group(0) ?


? ?# 返回匹配成功的整個子串'Hello World'>>> m.span(0) ?


? ? # 返回匹配成功的整個子串的索引(0, 11)>>> m.group(1) ?


? ?# 返回第一個分組匹配成功的子串'Hello'>>> m.span(1) ?


? ? # 返回第一個分組匹配成功的子串的索引(0, 5)>>> m.group(2) ?


? ?# 返回第二個分組匹配成功的子串'World'>>> m.span(2) ?


? ? # 返回第二個分組匹配成功的子串(6, 11)>>> m.groups() ? ? ?

? ? ? ? ? ? ? ? ? ? ?# 等價于

(m.group(1), m.group(2), ...)('Hello', 'World')>>> m.group(3) ?


? ?# 不存在第三個分組Traceback (most recent call last):

?File"", line 1, in IndexError:no suchgroup

2.findall方法

在字符串中找到正則表達(dá)式所匹配的所有子串确买,并返回一個列表,如果沒有找到匹配的纱皆,則返回空列表湾趾。

注意:match 和search 是匹配一次 findall 匹配所有。

語法格式為:

findall(string[, pos[, endpos]])

參數(shù):

[if !supportLists]·??????????????????[endif]string?: 待匹配的字符串派草。

[if !supportLists]·??????????????????[endif]pos?: 可選參數(shù)搀缠,指定字符串的起始位置,默認(rèn)為 0近迁。

[if !supportLists]·??????????????????[endif]endpos?: 可選參數(shù)艺普,指定字符串的結(jié)束位置,默認(rèn)為字符串的長度鉴竭。

查找字符串中的所有數(shù)字:

實例

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time ? ?:

2018/4/29 22:15# @Author ?: Feng Xiaoqing# @File ? ?: test2.py#

@Function: -----------importre


pattern = re.compile(r'\d+') ? # 查找數(shù)字result1 =

pattern.findall('runoob 123 google 456')

result2 = pattern.findall('run88oob123google456', 0, 10)


print(result1)

print(result2)

輸出結(jié)果:

['123', '456']

['88', '12']

Re模塊的方法:

(1)re.match函數(shù)

re.match 嘗試從字符串的起始位置匹配一個模式歧譬,如果不是起始位置匹配成功的話,match()就返回none搏存。

函數(shù)語法

re.match(pattern, string, flags=0)

函數(shù)參數(shù)說明:

參數(shù)

描述


pattern匹配的正則表達(dá)式

string要匹配的字符串瑰步。

flags標(biāo)志位,用于控制正則表達(dá)式的匹配方式璧眠,如:是否區(qū)分大小寫面氓,多行匹配等等。參見:正則表達(dá)式修飾符 - 可選標(biāo)志

匹配成功re.match方法返回一個匹配的對象蛆橡,否則返回None。

我們可以使用group(num) 或 groups() 匹配對象函數(shù)來獲取匹配表達(dá)式掘譬。

匹配對象方法

描述


group(num=0)匹配的整個表達(dá)式的字符串泰演,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應(yīng)值的元組葱轩。

groups()返回一個包含所有小組字符串的元組睦焕,從 1 到 所含的小組號藐握。

實例

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time ? ?:

2018/4/29 22:15# @Author ?: Feng Xiaoqing# @File ? ?: test2.py#

@Function: -----------importre


pattern = re.compile(r'\d+') ?# 查找數(shù)字result1 =

pattern.findall('runoob 123 google 456')

result2 = pattern.findall('run88oob123google456', 0, 10)


print(result1)

print(result2)

以上實例運(yùn)行輸出結(jié)果為:

(0, 3)

None

實例

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time ? ?:

2018/4/29 22:55# @Author ?: Feng Xiaoqing# @File ? ?: test2.py#

@Function: -----------importre


line = "Cats are smarter than dogs"

?matchObj = re.match(r'(.*) are

(.*?) .*', line, re.M|re.I)

if matchObj: ? print "matchObj.group() :

", matchObj.group() ? print "matchObj.group(1)

: ", matchObj.group(1) ? print "matchObj.group(2)

: ", matchObj.group(2)else: ? print "No

match!!"

以上實例執(zhí)行結(jié)果如下:

matchObj.group() : ?Cats are smarter than dogsmatchObj.group(1) : ?CatsmatchObj.group(2) : ?smarter

(2)re.search方法

re.search 掃描整個字符串并返回第一個成功的匹配。

函數(shù)語法:

re.search(pattern, string, flags=0)

函數(shù)參數(shù)說明:

參數(shù)

描述


pattern匹配的正則表達(dá)式

string要匹配的字符串垃喊。

flags標(biāo)志位猾普,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫本谜,多行匹配等等初家。

匹配成功re.search方法返回一個匹配的對象,否則返回None乌助。

我們可以使用group(num) 或 groups() 匹配對象函數(shù)來獲取匹配表達(dá)式溜在。

匹配對象方法

描述


group(num=0)匹配的整個表達(dá)式的字符串,group() 可以一次輸入多個組號他托,在這種情況下它將返回一個包含那些組所對應(yīng)值的元組掖肋。

groups()返回一個包含所有小組字符串的元組,從 1 到 所含的小組號赏参。

實例

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time ? ?:

2018/4/29 22:15# @Author ?: Feng Xiaoqing# @File ? ?: test2.py#

@Function: -----------importre

print(re.search('www', 'www.runoob.com').span())

?# 在起始位置匹配print(re.search('com', 'www.runoob.com').span())

? ? ? ? # 不在起始位置匹配

以上實例運(yùn)行輸出結(jié)果為:

(0, 3)

(11, 14)

實例

#!/usr/bin/pythonimportre


line = "Cats are smarter than dogs";


searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj: ? print "searchObj.group() :

", searchObj.group() ? print "searchObj.group(1)

: ", searchObj.group(1) ? print "searchObj.group(2)

: ", searchObj.group(2)else: ? print "Nothing

found!!"

以上實例執(zhí)行結(jié)果如下:

searchObj.group() : ?Cats are smarter than dogssearchObj.group(1) : ?CatssearchObj.group(2) : ?smarter

re.match與re.search的區(qū)別

re.match只匹配字符串的開始志笼,如果字符串開始不符合正則表達(dá)式,則匹配失敗把篓,函數(shù)返回None纫溃;而re.search匹配整個字符串,直到找到一個匹配纸俭。

實例

#!/usr/bin/pythonimportre


line = "Cats are smarter than dogs";


matchObj = re.match( r'dogs', line, re.M|re.I)if matchObj:

? print "match --> matchObj.group() : ", matchObj.group()else: ? print "No

match!!"

?matchObj = re.search(r'dogs', line,

re.M|re.I)if matchObj: ? print "search -->

matchObj.group() : ", matchObj.group()else: ? print "No

match!!"

以上實例運(yùn)行結(jié)果如下:

No match!!

search --> matchObj.group() : ?dogs

Match從開頭開始匹配皇耗,匹配不到,返回空

Search從開頭開始匹配揍很,然后第第二個開始匹配郎楼,只匹配一個結(jié)果。

Match的效率是最高的窒悔,就要求我們正則表達(dá)式要寫正確

(3)Split方法

re.split

split 方法按照能夠匹配的子串將字符串分割后返回列表呜袁,它的使用形式如下:

re.split(pattern, string[, maxsplit=0, flags=0])

參數(shù):

參數(shù)

描述


pattern匹配的正則表達(dá)式

string要匹配的字符串。

maxsplit分隔次數(shù)简珠,maxsplit=1 分隔一次阶界,默認(rèn)為 0,不限制次數(shù)聋庵。

flags標(biāo)志位膘融,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫祭玉,多行匹配等等氧映。參見:正則表達(dá)式修飾符 - 可選標(biāo)志

實例

>>>importre

>>> re.split('\W+', 'runoob,

runoob, runoob.') ['runoob', 'runoob', 'runoob', '']

>>> re.split('(\W+)', ' runoob,

runoob, runoob.') ['', ' ', 'runoob', ', ', 'runoob', ', ', 'runoob', '.', ''] >>> re.split('\W+', ' runoob, runoob, runoob.', 1) ['', 'runoob,

runoob, runoob.']

>>> re.split('a*', 'hello world') # 對于一個找不到匹配的字符串而言,split

不會對其作出分割 ['hello world']

split(string[, maxsplit])

按照能夠匹配的子串將string分割后返回列表脱货。maxsplit用于指定最大分割次數(shù)岛都,不指定將全部分割律姨。

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time ? ?:

2018/4/29 22:15# @Author ?: Feng Xiaoqing# @File ? ?: test2.py#

@Function: -----------importre


p = re.compile(r'\d+')


print(p.split('one1two2three3four4'))

結(jié)果:

['one', 'two', 'three', 'four', '']

(4)sub檢索和替換

Python 的 re 模塊提供了re.sub用于替換字符串中的匹配項。

語法:

re.sub(pattern, repl, string, count=0, flags=0)

參數(shù):

[if !supportLists]·??????????????????[endif]pattern : 正則中的模式字符串臼疫。

[if !supportLists]·??????????????????[endif]repl : 替換的字符串择份,也可為一個函數(shù)。

[if !supportLists]·??????????????????[endif]string : 要被查找替換的原始字符串烫堤。

[if !supportLists]·??????????????????[endif]count : 模式匹配后替換的最大次數(shù)荣赶,默認(rèn) 0 表示替換所有的匹配。

實例

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time ? ?:

2018/4/29 22:33# @Author ?: Feng Xiaoqing# @File ? ?: test2.py#

@Function: -----------

?importre


phone = "2004-959-559 # 這是一個國外電話號碼"

?# 刪除字符串中的 Python注釋 num = re.sub(r'#.*$', "", phone)print "電話號碼是:

", num

# 刪除非數(shù)字(-)的字符串 num = re.sub(r'\D', "", phone)print "電話號碼是 :

", num

以上實例執(zhí)行結(jié)果如下:

電話號碼是: ?2004-959-559

電話號碼是 : ?2004959559

repl 參數(shù)是一個函數(shù)

以下實例中將字符串中的匹配的數(shù)字乘以 2:

實例

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time ? ?:

2018/4/29 22:15# @Author ?: Feng Xiaoqing# @File ? ?: test2.py#

@Function: -----------importre


pattern = re.compile(r'\d+') ? # 查找數(shù)字result1 =

pattern.findall('runoob 123 google 456')

result2 = pattern.findall('run88oob123google456', 0, 10)


print(result1)

print(result2)

執(zhí)行輸出結(jié)果為:

A46G8HFD1134

(5)findall方法

在字符串中找到正則表達(dá)式所匹配的所有子串塔逃,并返回一個列表讯壶,如果沒有找到匹配的,則返回空列表湾盗。

注意:match 和search 是匹配一次 findall 匹配所有伏蚊。

語法格式為:

findall(string[, pos[, endpos]])

參數(shù):

[if !supportLists]·??????????????????[endif]string?: 待匹配的字符串。

[if !supportLists]·??????????????????[endif]pos?: 可選參數(shù)格粪,指定字符串的起始位置躏吊,默認(rèn)為 0。

[if !supportLists]·??????????????????[endif]endpos?: 可選參數(shù)帐萎,指定字符串的結(jié)束位置比伏,默認(rèn)為字符串的長度。

查找字符串中的所有數(shù)字:

實例

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time ? ?:

2018/4/29 22:15# @Author ?: Feng Xiaoqing# @File ? ?: test2.py#

@Function: -----------

?importre


pattern = re.compile(r'\d+') ? # 查找數(shù)字result1 =

pattern.findall('runoob 123 google 456')

result2 = pattern.findall('run88oob123google456', 0, 10)


print(result1)

print(result2)

輸出結(jié)果:

['123', '456']

['88', '12']

(6)finditer方法

和 findall 類似疆导,在字符串中找到正則表達(dá)式所匹配的所有子串赁项,并把它們作為一個迭代器返回。

re.finditer(pattern, string, flags=0)

參數(shù):

參數(shù)

描述


pattern匹配的正則表達(dá)式

string要匹配的字符串澈段。

flags標(biāo)志位悠菜,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫败富,多行匹配等等悔醋。參見:正則表達(dá)式修飾符 - 可選標(biāo)志

實例

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time ? ?:

2018/4/29 22:15# @Author ?: Feng Xiaoqing# @File ? ?: test2.py#

@Function: -----------importre


it = re.finditer(r"\d+","12a32bc43jf3")

for match init:

?print(match.group() )

輸出結(jié)果:

12

32

43

3

group()

group(0)??????group(1)???? group(“tagname”)

gourps()

groupdict()


findall

import re

p = re.compile(r'\d+')

print(findall('one1two2three3four4'))

結(jié)果:

['1', '2', '3', '4']

finditer

sub

Split? \d+

‘one1two2three3four4’

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time ? ?:

2018/4/29 20:24# @Author ?: fengxiaoqing# @File ? ?: test.py'''

xxx

? 查看不同匹配規(guī)則的效率'''import reimport timeit#

print(timeit.timeit(setup='''import re; reg = re.compile('<(?P\w*)>.*')''',

stmt='''reg.match('

xxx

')''', number=1000000))#

print(timeit.timeit(setup='''import re''',

stmt='''re.match('<(?P\w*)>.*',

'

xxx

')''', number=1000000))s = "ab

xxx

dsafasdfsdfads"reg =

re.compile(r"(<(?P\w+)>(.*))")

print(reg.match(s))

print(reg.search(s).group(3))

print(reg.findall(s))# print(reg.findall(s)[1])#

print(reg.findall(s)[2])# reg.split(s)# reg.findall(s)# reg.groups(s)x = '1one2two3three4four'reg1 =

re.compile("\d")

print(reg1.findall(x))

print(reg1.split(x))

*聲明:推送內(nèi)容及圖片來源于網(wǎng)絡(luò),部分內(nèi)容會有所改動兽叮,版權(quán)歸原作者所有芬骄,如來源信息有誤或侵犯權(quán)益,請聯(lián)系我們刪除或授權(quán)事宜鹦聪。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末账阻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子泽本,更是在濱河造成了極大的恐慌宰僧,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異琴儿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嘁捷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門造成,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人雄嚣,你說我怎么就攤上這事晒屎。” “怎么了缓升?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵鼓鲁,是天一觀的道長。 經(jīng)常有香客問我港谊,道長骇吭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任歧寺,我火速辦了婚禮燥狰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斜筐。我一直安慰自己龙致,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布顷链。 她就那樣靜靜地躺著目代,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗤练。 梳的紋絲不亂的頭發(fā)上榛了,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音潭苞,去河邊找鬼忽冻。 笑死,一個胖子當(dāng)著我的面吹牛此疹,可吹牛的內(nèi)容都是我干的僧诚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼蝗碎,長吁一口氣:“原來是場噩夢啊……” “哼湖笨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹦骑,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤慈省,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后眠菇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體边败,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袱衷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了笑窜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片致燥。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖排截,靈堂內(nèi)的尸體忽然破棺而出嫌蚤,到底是詐尸還是另有隱情,我是刑警寧澤断傲,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布脱吱,位于F島的核電站,受9級特大地震影響认罩,放射性物質(zhì)發(fā)生泄漏箱蝠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一猜年、第九天 我趴在偏房一處隱蔽的房頂上張望抡锈。 院中可真熱鬧,春花似錦乔外、人聲如沸床三。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撇簿。三九已至,卻和暖如春差购,著一層夾襖步出監(jiān)牢的瞬間四瘫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工欲逃, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留找蜜,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓稳析,卻偏偏與公主長得像洗做,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子彰居,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容