python中的正則表達式(re模塊)三

元字符之分組 ()

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
print(re.findall(r"(abc)+",'abcccccabccc'))
#註釋:分組是把括號內的字符串看成一個整體來做正則匹配

以上實例執行結果:
['abc', 'abc']

import re
ret=re.search('(?P<id>\d{2})\.(?P<name>\w{3})','23.com')
print(ret.group())   
print(ret.group('id')) 
#註釋:使用分組的來獲取自己想要的組,以上分文兩個組(id組和name組),實際正真在匹配的是\d{2}和\w{3}
#註釋:(?P<>) 是分組的固定格式,裏面的ID爲自定義名字

以上實例執行結果:
23.com
23

re模塊常用方法 search

#類似於find方法,當第一次匹配到以後就不會繼續往後找直接返回結果,如果找不到返回None。

以下實例是使用search方法匹配數字;返回的結果一個match對象

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
ret=re.search('\d+','sdf23sdf35sdfs36')
print(ret)

以上實例執行結果:
<_sre.SRE_Match object; span=(3, 5), match='23'>

獲取match對象的值,使用group方法

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
ret=re.search('\d+','sdf23sdf35sdfs36').group()
print(ret)

以上實例執行結果
23

re.match方法與search大致相同,不過match在字符串開始處進行匹配;

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
ret=re.search('\d+','56sdf23sdf35sdfs36').group()
print(ret)

以上實例執行結果
56

split()方法切分字符串

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
ret=re.split('sd','56sdf23sdf35sdfs36')
print(ret)

以上實例執行結果
['56', 'f23', 'f35', 'fs36']

sub()方法與字符串中的replace()方法一樣;查找替換

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
ret=re.sub('\d','abc','alvin5yuan6')
print(ret) 
#註釋:將數字替換爲abc
> 執行結果 alvinabcyuanabc

ret=re.subn('\d','abc','alvin5yuan6')
print(ret)   
#註釋:將數字替換爲abc,但是會顯示有幾處被替換
> 執行結果 ('alvinabcyuanabc', 2)

compile()方法將正則表達式編譯成對象;可以多次重複使用,速度效率更高更快。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
com=re.compile('\d+')        #將正則表達式編譯成對象,多次重複使用的時候效率會提高;
res=com.findall('sdjfkl2456sdfds456sdfds456')        #任意方法都可以用findall、search等;
print(res)

finditer()方法將查詢後的結果返回一個迭代器

import re
ret=re.finditer('\d','ds3sy4784a')
print(ret)        #<callable_iterator object at 0x10195f940>

print(next(ret).group())
print(next(ret).group())

注意:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
res=re.findall('www\.(?:baidu|google)\.com',"www.baidu.com")
print(res)
#註釋:不捕獲分組,findall方法是分組下只返回分組部分,如果想完整顯示使用 ?:

#拓展:不捕獲分組
匹配括號中的任何正則表達式,但是匹配的子字符串不能在匹配後提取或在模式中引用。
(a.b)xy\1: 能匹配到a6bxya6b,  不能匹配到a6bxya7b    (a.b)在前面匹配到的內容在後面也要一樣 這就叫引用

引用:
\1: 後向引用,引用前面的第一個左括號以及與之對應的右括號中的模式所匹配到的內容
\2

以上實例執行結果:
www.baidu.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章