python re

轉(zhuǎn)載:https://www.runoob.com/python/python-reg-expressions.html

re.match函數(shù)

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

函數(shù)語法

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">re.match(pattern, string, flags=0)</pre>

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

| 參數(shù) | 描述 |
| pattern | 匹配的正則表達(dá)式 |
| string | 要匹配的字符串凄硼。 |
| flags | 標(biāo)志位拧略,用于控制正則表達(dá)式的匹配方式圆仔,如:是否區(qū)分大小寫荔棉,多行匹配等等邑狸。參見:正則表達(dá)式修飾符 - 可選標(biāo)志 |

匹配成功re.match方法返回一個(gè)匹配的對象到涂,否則返回None脊框。

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

| 匹配對象方法 | 描述 |
| group(num=0) | 匹配的整個(gè)表達(dá)式的字符串践啄,group() 可以一次輸入多個(gè)組號浇雹,在這種情況下它將返回一個(gè)包含那些組所對應(yīng)值的元組。 |
| groups() | 返回一個(gè)包含所有小組字符串的元組屿讽,從 1 到 所含的小組號昭灵。 |

實(shí)例

!/usr/bin/python # -- coding: UTF-8 -- import re print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配 print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配

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

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">(0, 3) None</pre>

實(shí)例

!/usr/bin/python import re 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!!"

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

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats matchObj.group(2) : smarter</pre>


re.search方法

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

函數(shù)語法:

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">re.search(pattern, string, flags=0)</pre>

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

| 參數(shù) | 描述 |
| pattern | 匹配的正則表達(dá)式 |
| string | 要匹配的字符串。 |
| flags | 標(biāo)志位烂完,用于控制正則表達(dá)式的匹配方式试疙,如:是否區(qū)分大小寫,多行匹配等等抠蚣。 |

匹配成功re.search方法返回一個(gè)匹配的對象祝旷,否則返回None。

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

| 匹配對象方法 | 描述 |
| group(num=0) | 匹配的整個(gè)表達(dá)式的字符串怀跛,group() 可以一次輸入多個(gè)組號,在這種情況下它將返回一個(gè)包含那些組所對應(yīng)值的元組护侮。 |
| groups() | 返回一個(gè)包含所有小組字符串的元組敌完,從 1 到 所含的小組號。 |

實(shí)例

!/usr/bin/python # -- coding: UTF-8 -- import re print(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配 print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配

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

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">(0, 3) (11, 14)</pre>

實(shí)例

!/usr/bin/python import re 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!!"

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

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">searchObj.group() : Cats are smarter than dogs
searchObj.group(1) : Cats searchObj.group(2) : smarter</pre>


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

re.match只匹配字符串的開始羊初,如果字符串開始不符合正則表達(dá)式滨溉,則匹配失敗,函數(shù)返回None长赞;而re.search匹配整個(gè)字符串晦攒,直到找到一個(gè)匹配。

實(shí)例

!/usr/bin/python import re 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 --> searchObj.group() : ", matchObj.group() else: print "No match!!"

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

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">No match!! search --> searchObj.group() : dogs</pre>


檢索和替換

Python 的 re 模塊提供了re.sub用于替換字符串中的匹配項(xiàng)得哆。

語法:

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">re.sub(pattern, repl, string, count=0, flags=0)</pre>

參數(shù):

  • pattern : 正則中的模式字符串脯颜。
  • repl : 替換的字符串,也可為一個(gè)函數(shù)贩据。
  • string : 要被查找替換的原始字符串栋操。
  • count : 模式匹配后替換的最大次數(shù),默認(rèn) 0 表示替換所有的匹配饱亮。

實(shí)例

!/usr/bin/python # -- coding: UTF-8 -- import re phone = "2004-959-559 # 這是一個(gè)國外電話號碼" # 刪除字符串中的 Python注釋 num = re.sub(r'#.*$', "", phone) print "電話號碼是: ", num # 刪除非數(shù)字(-)的字符串 num = re.sub(r'\D', "", phone) print "電話號碼是 : ", num

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

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">電話號碼是: 2004-959-559 電話號碼是 : 2004959559</pre>

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

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

實(shí)例

!/usr/bin/python # -- coding: UTF-8 -- import re # 將匹配的數(shù)字乘以 2 def double(matched): value = int(matched.group('value')) return str(value * 2) s = 'A23G4HFD567' print(re.sub('(?P<value>\d+)', double, s))

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

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">A46G8HFD1134</pre>

re.compile 函數(shù)

compile 函數(shù)用于編譯正則表達(dá)式矾芙,生成一個(gè)正則表達(dá)式( Pattern )對象,供 match() 和 search() 這兩個(gè)函數(shù)使用近上。

語法格式為:

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">re.compile(pattern[, flags])</pre>

參數(shù):

  • pattern : 一個(gè)字符串形式的正則表達(dá)式

  • flags : 可選剔宪,表示匹配模式,比如忽略大小寫壹无,多行模式等葱绒,具體參數(shù)為:

    1. re.I 忽略大小寫
    2. re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當(dāng)前環(huán)境
    3. re.M 多行模式
    4. re.S 即為 . 并且包括換行符在內(nèi)的任意字符(. 不包括換行符)
    5. re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫
    6. re.X 為了增加可讀性,忽略空格和 # 后面的注釋

實(shí)例

實(shí)例

import re >>> pattern = re.compile(r'\d+') # 用于匹配至少一個(gè)數(shù)字 >>> m = pattern.match('one12twothree34four') # 查找頭部斗锭,沒有匹配 >>> print m None >>> m = pattern.match('one12twothree34four', 2, 10) # 從'e'的位置開始匹配地淀,沒有匹配 >>> print m None >>> m = pattern.match('one12twothree34four', 3, 10) # 從'1'的位置開始匹配,正好匹配 >>> print m # 返回一個(gè) Match 對象 <_sre.SRE_Match object at 0x10a42aac0> >>> m.group(0) # 可省略 0 '12' >>> m.start(0) # 可省略 0 3 >>> m.end(0) # 可省略 0 5 >>> m.span(0) # 可省略 0 (3, 5)

在上面岖是,當(dāng)匹配成功時(shí)返回一個(gè) Match 對象骚秦,其中:

  • group([group1, …]) 方法用于獲得一個(gè)或多個(gè)分組匹配的字符串她倘,當(dāng)要獲得整個(gè)匹配的子串時(shí),可直接使用 group()group(0)作箍;
  • start([group]) 方法用于獲取分組匹配的子串在整個(gè)字符串中的起始位置(子串第一個(gè)字符的索引)硬梁,參數(shù)默認(rèn)值為 0;
  • end([group]) 方法用于獲取分組匹配的子串在整個(gè)字符串中的結(jié)束位置(子串最后一個(gè)字符的索引+1)胞得,參數(shù)默認(rèn)值為 0荧止;
  • span([group]) 方法返回 (start(group), end(group))

再看看一個(gè)例子:

實(shí)例

import re >>> pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I) # re.I 表示忽略大小寫 >>> m = pattern.match('Hello World Wide Web') >>> print m # 匹配成功阶剑,返回一個(gè) Match 對象 <_sre.SRE_Match object at 0x10bea83e8> >>> m.group(0) # 返回匹配成功的整個(gè)子串 'Hello World' >>> m.span(0) # 返回匹配成功的整個(gè)子串的索引 (0, 11) >>> m.group(1) # 返回第一個(gè)分組匹配成功的子串 'Hello' >>> m.span(1) # 返回第一個(gè)分組匹配成功的子串的索引 (0, 5) >>> m.group(2) # 返回第二個(gè)分組匹配成功的子串 'World' >>> m.span(2) # 返回第二個(gè)分組匹配成功的子串 (6, 11) >>> m.groups() # 等價(jià)于 (m.group(1), m.group(2), ...) ('Hello', 'World') >>> m.group(3) # 不存在第三個(gè)分組 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: no such group

findall

在字符串中找到正則表達(dá)式所匹配的所有子串跃巡,并返回一個(gè)列表,如果沒有找到匹配的牧愁,則返回空列表素邪。

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

語法格式為:

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">findall(string[, pos[, endpos]])</pre>

參數(shù):

  • string : 待匹配的字符串猪半。
  • pos : 可選參數(shù)兔朦,指定字符串的起始位置,默認(rèn)為 0磨确。
  • endpos : 可選參數(shù)沽甥,指定字符串的結(jié)束位置,默認(rèn)為字符串的長度乏奥。

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

實(shí)例

-- coding:UTF8 -- import re pattern = re.compile(r'\d+') # 查找數(shù)字 result1 = pattern.findall('runoob 123 google 456') result2 = pattern.findall('run88oob123google456', 0, 10) print(result1) print(result2)

輸出結(jié)果:

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">['123', '456'] ['88', '12']</pre>

re.finditer

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

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">re.finditer(pattern, string, flags=0)</pre>

參數(shù):

| 參數(shù) | 描述 |
| pattern | 匹配的正則表達(dá)式 |
| string | 要匹配的字符串恨诱。 |
| flags | 標(biāo)志位,用于控制正則表達(dá)式的匹配方式骗炉,如:是否區(qū)分大小寫照宝,多行匹配等等。參見:正則表達(dá)式修飾符 - 可選標(biāo)志 |

實(shí)例

-- coding: UTF-8 -- import re it = re.finditer(r"\d+","12a32bc43jf3") for match in it: print (match.group() )

輸出結(jié)果:

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">12 32 43 3</pre>

re.split

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

<pre class="prettyprint prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px auto; padding: 10px 15px; font: 400 12px/20px Menlo, Monaco, Consolas, "Andale Mono", "lucida console", "Courier New", monospace; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/images/codecolorer_bg.gif") center top rgb(251, 251, 251); color: rgb(51, 51, 51); letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">re.split(pattern, string[, maxsplit=0, flags=0])</pre>

參數(shù):

| 參數(shù) | 描述 |
| pattern | 匹配的正則表達(dá)式 |
| string | 要匹配的字符串。 |
| maxsplit | 分隔次數(shù)龙巨,maxsplit=1 分隔一次笼呆,默認(rèn)為 0,不限制次數(shù)旨别。 |
| flags | 標(biāo)志位诗赌,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫秸弛,多行匹配等等铭若。參見:正則表達(dá)式修飾符 - 可選標(biāo)志 |

實(shí)例

import re >>> 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') # 對于一個(gè)找不到匹配的字符串而言洪碳,split 不會(huì)對其作出分割 ['hello world']


正則表達(dá)式對象

re.RegexObject

re.compile() 返回 RegexObject 對象。

re.MatchObject

group() 返回被 RE 匹配的字符串叼屠。

  • start() 返回匹配開始的位置
  • end() 返回匹配結(jié)束的位置
  • span() 返回一個(gè)元組包含匹配 (開始,結(jié)束) 的位置

正則表達(dá)式修飾符 - 可選標(biāo)志

正則表達(dá)式可以包含一些可選標(biāo)志修飾符來控制匹配的模式瞳腌。修飾符被指定為一個(gè)可選的標(biāo)志。多個(gè)標(biāo)志可以通過按位 OR(|) 它們來指定镜雨。如 re.I | re.M 被設(shè)置成 I 和 M 標(biāo)志:

| 修飾符 | 描述 |
| re.I | 使匹配對大小寫不敏感 |
| 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á)式寫得更易于理解荚坞。 |


正則表達(dá)式模式

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

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

多數(shù)字母和數(shù)字前加一個(gè)反斜杠時(shí)會(huì)擁有不同的含義颓影。

標(biāo)點(diǎn)符號只有被轉(zhuǎn)義時(shí)才匹配自身各淀,否則它們表示特殊的含義。

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

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

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

| 模式 | 描述 |
| ^ | 匹配字符串的開頭 |
| $ | 匹配字符串的末尾。 |
| . | 匹配任意字符钮蛛,除了換行符鞭缭,當(dāng)re.DOTALL標(biāo)記被指定時(shí),則可以匹配包括換行符的任意字符魏颓。 |
| [...] | 用來表示一組字符,單獨(dú)列出:[amk] 匹配 'a'岭辣,'m'或'k' |
| [^...] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
| re* | 匹配0個(gè)或多個(gè)的表達(dá)式甸饱。 |
| re+ | 匹配1個(gè)或多個(gè)的表達(dá)式沦童。 |
| re? | 匹配0個(gè)或1個(gè)由前面的正則表達(dá)式定義的片段,非貪婪方式 |
| re{ n} | 精確匹配 n 個(gè)前面表達(dá)式叹话。例如偷遗, o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的兩個(gè) o驼壶。 |
| re{ n,} | 匹配 n 個(gè)前面表達(dá)式氏豌。例如, o{2,} 不能匹配"Bob"中的"o"热凹,但能匹配 "foooood"中的所有 o泵喘。"o{1,}" 等價(jià)于 "o+"泪电。"o{0,}" 則等價(jià)于 "o*"。 |
| re{ n, m} | 匹配 n 到 m 次由前面的正則表達(dá)式定義的片段纪铺,貪婪方式 |
| a| b | 匹配a或b |
| (re) | 對正則表達(dá)式分組并記住匹配的文本 |
| (?imx) | 正則表達(dá)式包含三種可選標(biāo)志:i, m, 或 x 相速。只影響括號中的區(qū)域。 |
| (?-imx) | 正則表達(dá)式關(guān)閉 i, m, 或 x 可選標(biāo)志霹陡。只影響括號中的區(qū)域和蚪。 |
| (?: re) | 類似 (...), 但是不表示一個(gè)組 |
| (?imx: re) | 在括號中使用i, m, 或 x 可選標(biāo)志 |
| (?-imx: re) | 在括號中不使用i, m, 或 x 可選標(biāo)志 |
| (?#...) | 注釋. |
| (?= re) | 前向肯定界定符。如果所含正則表達(dá)式烹棉,以 ... 表示攒霹,在當(dāng)前位置成功匹配時(shí)成功,否則失敗浆洗。但一旦所含表達(dá)式已經(jīng)嘗試催束,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊伏社。 |
| (?! re) | 前向否定界定符抠刺。與肯定界定符相反;當(dāng)所含表達(dá)式不能在字符串當(dāng)前位置匹配時(shí)成功 |
| (?> re) | 匹配的獨(dú)立模式摘昌,省去回溯速妖。 |
| \w | 匹配字母數(shù)字及下劃線 |
| \W | 匹配非字母數(shù)字及下劃線 |
| \s | 匹配任意空白字符,等價(jià)于 [\t\n\r\f]. |
| \S | 匹配任意非空字符 |
| \d | 匹配任意數(shù)字聪黎,等價(jià)于 [0-9]. |
| \D | 匹配任意非數(shù)字 |
| \A | 匹配字符串開始 |
| \Z | 匹配字符串結(jié)束罕容,如果是存在換行,只匹配到換行前的結(jié)束字符串稿饰。 |
| \z | 匹配字符串結(jié)束 |
| \G | 匹配最后匹配完成的位置锦秒。 |
| \b | 匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置喉镰。例如旅择, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'侣姆。 |
| \B | 匹配非單詞邊界生真。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'捺宗。 |
| \n, \t, 等. | 匹配一個(gè)換行符柱蟀。匹配一個(gè)制表符。等 |
| \1...\9 | 匹配第n個(gè)分組的內(nèi)容偿凭。 |
| \10 | 匹配第n個(gè)分組的內(nèi)容产弹,如果它經(jīng)匹配派歌。否則指的是八進(jìn)制字符碼的表達(dá)式弯囊。 |


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

字符匹配

| 實(shí)例 | 描述 |
| python | 匹配 "python". |

字符類

| 實(shí)例 | 描述 |
| [Pp]ython | 匹配 "Python" 或 "python" |
| rub[ye] | 匹配 "ruby" 或 "rube" |
| [aeiou] | 匹配中括號內(nèi)的任意一個(gè)字母 |
| [0-9] | 匹配任何數(shù)字痰哨。類似于 [0123456789] |
| [a-z] | 匹配任何小寫字母 |
| [A-Z] | 匹配任何大寫字母 |
| [a-zA-Z0-9] | 匹配任何字母及數(shù)字 |
| [^aeiou] | 除了aeiou字母以外的所有字符 |
| [^0-9] | 匹配除了數(shù)字外的字符 |

特殊字符類

| 實(shí)例 | 描述 |
| . | 匹配除 "\n" 之外的任何單個(gè)字符。要匹配包括 '\n' 在內(nèi)的任何字符匾嘱,請使用象 '[.\n]' 的模式斤斧。 |
| \d | 匹配一個(gè)數(shù)字字符。等價(jià)于 [0-9]霎烙。 |
| \D | 匹配一個(gè)非數(shù)字字符撬讽。等價(jià)于 [^0-9]。 |
| \s | 匹配任何空白字符悬垃,包括空格游昼、制表符、換頁符等等尝蠕。等價(jià)于 [ \f\n\r\t\v]烘豌。 |
| \S | 匹配任何非空白字符。等價(jià)于 [^ \f\n\r\t\v]看彼。 |
| \w | 匹配包括下劃線的任何單詞字符廊佩。等價(jià)于'[A-Za-z0-9_]'。 |
| \W | 匹配任何非單詞字符靖榕。等價(jià)于 '[^A-Za-z0-9_]'标锄。 |

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市茁计,隨后出現(xiàn)的幾起案子料皇,更是在濱河造成了極大的恐慌,老刑警劉巖簸淀,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓶蝴,死亡現(xiàn)場離奇詭異,居然都是意外死亡租幕,警方通過查閱死者的電腦和手機(jī)舷手,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劲绪,“玉大人男窟,你說我怎么就攤上這事〖指唬” “怎么了歉眷?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長颤枪。 經(jīng)常有香客問我汗捡,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任扇住,我火速辦了婚禮春缕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘艘蹋。我一直安慰自己锄贼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布女阀。 她就那樣靜靜地躺著宅荤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浸策。 梳的紋絲不亂的頭發(fā)上冯键,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機(jī)與錄音庸汗,去河邊找鬼琼了。 笑死,一個(gè)胖子當(dāng)著我的面吹牛夫晌,可吹牛的內(nèi)容都是我干的雕薪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼晓淀,長吁一口氣:“原來是場噩夢啊……” “哼所袁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凶掰,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤燥爷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后懦窘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體前翎,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年畅涂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了港华。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡午衰,死狀恐怖立宜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情臊岸,我是刑警寧澤橙数,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站帅戒,受9級特大地震影響灯帮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一钟哥、第九天 我趴在偏房一處隱蔽的房頂上張望响疚。 院中可真熱鬧,春花似錦瞪醋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸦采,卻和暖如春宾巍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渔伯。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工顶霞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锣吼。 一個(gè)月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓选浑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親玄叠。 傳聞我的和親對象是個(gè)殘疾皇子古徒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評論 2 349

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