欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python正則表達(dá)式常用函數(shù)總結(jié)

 更新時間:2017年06月24日 08:56:52   作者:世界看我我看世界  
這篇文章主要介紹了Python正則表達(dá)式常用函數(shù),結(jié)合實例形式總結(jié)分析了Python正則表達(dá)式常用函數(shù)功能、使用方法及相關(guān)注意事項,需要的朋友可以參考下

本文實例總結(jié)了Python正則表達(dá)式常用函數(shù)。分享給大家供大家參考,具體如下:

re.match()

函數(shù)原型:

match(pattern, string, flags=0)
    Try to apply the pattern at the start of the string,
     returning a match object, or None if no match was found.

函數(shù)作用:

re.match函數(shù)嘗試從字符串的開頭開始匹配一個模式,如果匹配成功,返回一個匹配成功的對象,否則返回None。

參數(shù)說明:

pattern:匹配的正則表達(dá)式
string:要匹配的字符串
flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式。如是否區(qū)分大小寫、是否多行匹配等。

我們可以使用group()或groups()匹配對象函數(shù)來獲取匹配后的結(jié)果。

group()

group(...)
    group([group1, ...]) -> str or tuple.
    Return subgroup(s) of the match by indices or names.
    For 0 returns the entire match.

獲得一個或多個分組截獲的字符串;指定多個參數(shù)時將以元組形式返回。group1可以使用編號也可以使用別名;編號0代表匹配的整個子串;默認(rèn)返回group(0);沒有截獲字符串的組返回None;截獲了多次的組返回最后一次截獲的子串。

groups()

groups(...)
    groups([default=None]) -> tuple.
    Return a tuple containing all the subgroups of the match, from 1.
    The default argument is used for groups
    that did not participate in the match

以元組形式返回全部分組截獲的字符串。相當(dāng)于調(diào)用group(1,2,…last)。沒有截獲字符串的組以默認(rèn)值None代替。

實例

import re
line = "This is the last one"
res = re.match( r'(.*) is (.*?) .*', line, re.M|re.I)
if res:
 print "res.group() : ", res.group()
 print "res.group(1) : ", res.group(1)
 print "res.group(2) : ", res.group(2)
 print "res.groups() : ", res.groups()
else:
 print "No match!!"

re.M|re.I:這兩參數(shù)表示多行匹配|不區(qū)分大小寫,同時生效。

細(xì)節(jié)實例:

>>> re.match(r'.*','.*g3jl\nok').group()
'.*g3jl'

.(點)表示除換行符以外的任意一個字符,*(星號)表示匹配前面一個字符0次1次或多次,這兩聯(lián)合起來使用表示匹配除換行符意外的任意多個字符,所以出現(xiàn)以上的結(jié)果。

1、
re.match(r'.*..', '..').group()
'..'
2、
>>> re.match(r'.*g.','.*g3jlok').group()
'.*g3'
3、
>>> re.match(r'.*...', '..').group()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

上面兩例子為什么有結(jié)果呢?這是因為第一個例子.*..中的.*匹配了0次,后面的..匹配字符串中..,而第二個例子中的 .* 匹配了一次,匹配字符串中的 .*,g匹配了后面的g字符,最后一個.號匹配了。
為什么第三個例子沒有匹配到結(jié)果呢?這是因為就算正則表達(dá)式中的 .* 匹配0次,后面的三個點也不能完全匹配原字符串中的兩個點,所以匹配失敗了。
從上面幾個例子可以看出,只有當(dāng)正則表達(dá)式中要匹配的字符數(shù)小于等于原字符串中的字符數(shù),才能匹配出結(jié)果。并且 “.*” 在匹配的過程中會回溯,先匹配0次,如果整個表達(dá)式能匹配成功,再匹配一次,如果還是能匹配,那就匹配兩次,這樣一次下去,直到不能匹配成功時,返回最近一次匹配成功的結(jié)果,這就是”.*”的貪婪性。

匹配Python中的標(biāo)識符:

>>> re.match(r'^[a-zA-Z|_][\w_]*','_1name1').group()
'_1name1'
>>> re.match(r'^[a-zA-Z|_][\w_]*','_name1').group()
'_name1'
>>> re.match(r'^[a-zA-Z|_][\w_]*','num').group()
'num'
>>> re.match(r'^[a-zA-Z|_][\w_]*','1num').group()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

re.search()

函數(shù)原型:

search(pattern, string, flags=0)
    Scan through string looking for a match to the pattern,
    returning a match object, or None if no match was found.

函數(shù)作用:

掃描整個字符串并返回第一次成功的匹配對象,如果匹配失敗,則返回None。

參數(shù)說明:

pattern:匹配的正則表達(dá)式
string:要匹配的字符串
flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式。如是否區(qū)分大小寫、是否多行匹配等。

跟re.match函數(shù)一樣,使用group()和groups()方法來獲取匹配后的結(jié)果。

>>> re.search(r'[abc]\*\d{2}','12a*23Gb*12ad').group()
'a*23'

從匹配結(jié)果看出,re.search返回了第一次匹配成功的結(jié)果'a*23',如果盡可能多的匹配的話,還可以匹配后面的'b*12'。

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

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

>>> re.match(r'(.*)(are)',"Cats are smarter than dogs").group(2)
'are'
>>> re.search(r'(are)+',"Cats are smarter than dogs").group()
'are'

上面兩個例子是等價的。

re.sub()

Python的re模塊中提供了re.sub()函數(shù)用于替換字符串中的匹配項,如果沒有匹配的項則字符串將沒有匹配的返回。

函數(shù)原型:

sub(pattern, repl, string, count=0, flags=0)
    Return the string obtained by replacing the leftmost
    non-overlapping occurrences of the pattern in string by the
    replacement repl.  repl can be either a string or a callable;
    if a string, backslash escapes in it are processed.  If it is
    a callable, it's passed the match object and must return
    a replacement string to be used.

參數(shù)說明:

pattern:匹配的正則表達(dá)式
repl:用于替換的字符串
string:要被替換的字符串
count:替換的次數(shù),如果為0表示替換所有匹配到的字串,如果是1表示替換1次等,該參數(shù)必須是非負(fù)整數(shù),默認(rèn)為0。
flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式。如是否區(qū)分大小寫、是否多行匹配等。

實例

將手機號的后4位替換成0

>>> re.sub('\d{4}$','0000','13549876489')
'13549870000'

將代碼后面的注釋信息去掉

>>> re.sub('#.*$','', 'num = 0 #a number')
'num = 0 '

re.split()

函數(shù)原型:

split(pattern, string, maxsplit=0, flags=0)
    Split the source string by the occurrences of the pattern,
    returning a list containing the resulting substrings.

函數(shù)作用:

分割字符串,將字符串用給定的正則表達(dá)式匹配的字符串進行分割,分割后返回結(jié)果list。

參數(shù)說明:

pattern:匹配的正則表達(dá)式
string:被分割的字符串
maxsplit:最大的分割次數(shù)
flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式。如是否區(qū)分大小寫、是否多行匹配等。

re.findall()

函數(shù)原型:

findall(pattern, string, flags=0)
    Return a list of all non-overlapping matches in the string.
    If one or more groups are present in the pattern, return a
    list of groups; this will be a list of tuples if the pattern
    has more than one group.
    Empty matches are included in the result.

函數(shù)的作用:

獲取字符串中所有匹配的字符串,并以列表的形式返回。列表中的元素有如下幾種情況:

當(dāng)正則表達(dá)式中含有多個圓括號()時,列表的元素為多個字符串組成的元組,而且元組中字符串個數(shù)與括號對數(shù)相同,并且字符串排放順序跟括號出現(xiàn)的順序一致(一般看左括號'(‘就行),字符串內(nèi)容與每個括號內(nèi)的正則表達(dá)式想對應(yīng)。
當(dāng)正則表達(dá)式中只帶有一個圓括號時,列表中的元素為字符串,并且該字符串的內(nèi)容與括號中的正則表達(dá)式相對應(yīng)。(注意:列表中的字符串只是圓括號中的內(nèi)容,不是整個正則表達(dá)式所匹配的內(nèi)容。)
當(dāng)正則表達(dá)式中沒有圓括號時,列表中的字符串表示整個正則表達(dá)式匹配的內(nèi)容。

參數(shù)說明:

pattern:匹配的正則表達(dá)式
string:被分割的字符串
flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式。如是否區(qū)分大小寫、是否多行匹配等。

實例:

1、匹配字符串中所有含有'oo'字符的單詞

#正則表達(dá)式中沒有括號
>>> re.findall(r'\w*oo\w*', 'woo this foo is too')
['woo', 'foo', 'too']

從結(jié)果可以看出,當(dāng)正則表達(dá)式中沒有圓括號時,列表中的字符串表示整個正則表達(dá)式匹配的內(nèi)容

2、獲取字符串中所有的數(shù)字字符串

#正則表達(dá)式中只有1個括號
>>> re.findall(r'.*?(\d+).*?','adsd12343.jl34d5645fd789')
['12343', '34', '5645', '789']

從上面結(jié)果可以看出,當(dāng)正則表達(dá)式中只帶有一個圓括號時,列表中的元素為字符串,并且該字符串的內(nèi)容與括號中的正則表達(dá)式相對應(yīng)。

3、提取字符串中所有的有效的域名地址

#正則表達(dá)式中有多個括號時
>>> add = 'https://www.net.com.edu//action=?asdfsd and other https://www.baidu.com//a=b'
>>> re.findall(r'((w{3}\.)(\w+\.)+(com|edu|cn|net))',add)
[('www.net.com.edu', 'www.', 'com.', 'edu'), ('www.baidu.com', 'www.', 'baidu.','com')]

從執(zhí)行結(jié)果可以看出,正則表達(dá)式中有多個圓括號時,返回匹配成功的列表中的每一個元素都是由一次匹配成功后,正則表達(dá)式中所有括號中匹配的內(nèi)容組成的元組。

re.finditer()

函數(shù)原型:

finditer(pattern, string, flags=0)
    Return an iterator over all non-overlapping matches in the string.  For each match, the iterator
returns a match object.
    Empty matches are included in the result.

函數(shù)作用:

跟re.findall()函數(shù)一樣,匹配字符串中所有滿足的字串,只是返回的是一個迭代器,而不是一個像findall函數(shù)那樣存有所有結(jié)果的list,這個迭代器里面存的是每一個結(jié)果的一個匹配對象,這樣可以節(jié)省空間,一般用在需要匹配大量的結(jié)果時,類似于range和xrange的區(qū)別。

參數(shù)說明:

pattern:匹配的正則表達(dá)式
string:被分割的字符串
flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式。如是否區(qū)分大小寫、是否多行匹配等。

如:匹配字符串中所有的數(shù)字字串

>>> for i in re.finditer(r'\d+','one12two34three56four') :
...  print i.group(),
...
12 34 56

start()

返回匹配的起始位置。如:

>>> re.search(r'\d+', 'asdf13df234').start()

注意,索引位置是從0開始計數(shù)的。

end()

返回匹配結(jié)束的下一個位置。如:

>>> re.search(r'\d+', 'asdf13df234').end()

span()

返回匹配的區(qū)間,左閉右開。如:

>>> re.search(r'\d+', 'asdf13df234').span()
(4, 6)

re.compile()

函數(shù)原型:

compile(pattern, flags=0)
    Compile a regular expression pattern, returning a pattern object.

函數(shù)作用:

編譯一個正則表達(dá)式語句,并返回編譯后的正則表達(dá)式對象。
這樣我們就可以將那些經(jīng)常使用的正則表達(dá)式編譯成正則表達(dá)式對象,可以提高一定的效率。如:
一句話包含五個英文單詞,長度不一定,用空格分割,請把五個單詞匹配出來

>>> s = "this is  a python test"
>>> p = re.compile('\w+') #編譯正則表達(dá)式,獲得其對象
>>> res = p.findall(s)#用正則表達(dá)式對象去匹配內(nèi)容
>>> print res
['this', 'is', 'a', 'python', 'test']

PS:這里再為大家提供2款非常方便的正則表達(dá)式工具供大家參考使用:

JavaScript正則表達(dá)式在線測試工具:
http://tools.jb51.net/regex/javascript

正則表達(dá)式在線生成工具:
http://tools.jb51.net/regex/create_reg

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python正則表達(dá)式用法總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • python中字典增加和刪除使用方法

    python中字典增加和刪除使用方法

    這篇文章主要介紹了python中字典增加和刪除使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 使用python-pptx創(chuàng)建PPT演示文檔功能實踐

    使用python-pptx創(chuàng)建PPT演示文檔功能實踐

    這篇文章主要介紹了使用python-pptx創(chuàng)建PPT演示文檔功能實踐,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python自定義裝飾器原理與用法實例分析

    Python自定義裝飾器原理與用法實例分析

    這篇文章主要介紹了Python自定義裝飾器原理與用法,結(jié)合實例形式較為詳細(xì)的分析了Python自定義裝飾器,帶參數(shù)的裝飾器等概念、原理、實現(xiàn)方法及相關(guān)使用技巧,需要的朋友可以參考下
    2018-07-07
  • 淺析python的優(yōu)勢和不足之處

    淺析python的優(yōu)勢和不足之處

    在本篇內(nèi)容中小編給大家整理了關(guān)于分析python的優(yōu)勢和不足的分析,有需要的朋友們參考下。
    2018-11-11
  • 詳解Python相關(guān)文件常見的后綴名

    詳解Python相關(guān)文件常見的后綴名

    常見的 Python 文件后綴有:py、pyc 、pyo、 pyi、pyw、 pyd、 pyx 等。本文給大家介紹Python相關(guān)文件常見的后綴名,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Python OpenCV 基于圖像邊緣提取的輪廓發(fā)現(xiàn)函數(shù)

    Python OpenCV 基于圖像邊緣提取的輪廓發(fā)現(xiàn)函數(shù)

    這篇文章主要介紹了Python OpenCV 基于圖像邊緣提取的輪廓發(fā)現(xiàn)函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python+opencv實現(xiàn)高斯平滑濾波

    python+opencv實現(xiàn)高斯平滑濾波

    這篇文章主要為大家詳細(xì)介紹了python+opencv實現(xiàn)高斯平滑濾波,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Python使用turtle庫繪制科赫雪花詳細(xì)代碼

    Python使用turtle庫繪制科赫雪花詳細(xì)代碼

    科赫曲線是一種分形,其形態(tài)非常像雪花,因此又被稱作科赫雪花、雪花曲線,這篇文章主要給大家介紹了關(guān)于Python使用turtle庫繪制科赫雪花的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • python logging 日志輪轉(zhuǎn)文件不刪除問題的解決方法

    python logging 日志輪轉(zhuǎn)文件不刪除問題的解決方法

    最近在維護項目的python項目代碼,項目使用了 python 的日志模塊 logging, 設(shè)定了保存的日志數(shù)目, 不過沒有生效,還要通過contab定時清理數(shù)據(jù)
    2016-08-08
  • 在Python的Flask框架中驗證注冊用戶的Email的方法

    在Python的Flask框架中驗證注冊用戶的Email的方法

    這篇文章主要介紹了在Python的Flask框架中驗證注冊用戶的Email的方法,包括非常詳細(xì)的測試過程,極力推薦!需要的朋友可以參考下
    2015-09-09

最新評論