最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)的正則表達(dá)式功能入門(mén)教程【經(jīng)典】

 更新時(shí)間:2017年06月05日 11:36:12   作者:九茶  
這篇文章主要介紹了python實(shí)現(xiàn)的正則表達(dá)式功能,詳細(xì)分析了Python正則表達(dá)式中常用的各種符號(hào)、函數(shù)等的使用方法與注意事項(xiàng),需要的朋友可以參考下

本文講述了python實(shí)現(xiàn)的正則表達(dá)式功能。分享給大家供大家參考,具體如下:

前文:

首先,什么叫正則表達(dá)式(Regular Expression)?

例如我們要判斷字符串"adi_e32fv,Ls"里面是否含有子串"e32f",又例如我們?cè)谝粋€(gè)含百萬(wàn)個(gè)姓名的txt文件中找姓“王”,名字以“五”結(jié)尾的名字,然后打印出來(lái)。結(jié)果為:“王五”、“王小五”、“王大五”、“王小小五”……

以前我們是使用字符串函數(shù)來(lái)查找的,但是代碼實(shí)現(xiàn)起來(lái)會(huì)很復(fù)雜。如今用正則表達(dá)式只需要一句 re.findall('王.*?五',txt1) 就可以了!正則表達(dá)式是寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)的最基本的知識(shí),可以用正則表達(dá)式在html中搜集滿足某些字串要求的網(wǎng)址。下面是個(gè)人對(duì)正則表達(dá)式基礎(chǔ)知識(shí)的一些總結(jié)。

(操作環(huán)境:32位Win8系統(tǒng),運(yùn)行工具:python2.7.9+Eclipse.)

正文:

1、首先要導(dǎo)入python的re模塊。

2、元字符 . ^ $ * + ? {} [] \ | ()

re模塊中的findall(str1,str2)方法返回字串str2中匹配str1格式的字串。例如在字符串'dit dot det,dct dit dot'中匹配'dit'結(jié)果為:

str1 = 'dit dot det,dct dit dot'
print re.findall('dit',str1)

結(jié)果:

['dit', 'dit']

|作用:'dit|dct'表示dit或者dct。

str1 = 'dit dot det,dct dit dot'
print re.findall('dit|dct',str1)

結(jié)果:

['dit', 'dct', 'dit']

[]作用:[ic]表示i或c,例如'd[ic]t'表示dit和dct兩者,和'dit|dct'等價(jià):

str1 = 'dit dot det,dct dit dot'
print re.findall('d[ic]t',str1)

結(jié)果:

['dit', 'dct', 'dit']

^作用一:[^ic]中^表示否定,即除了i和c:

str1 = 'dit dot det,dct dit dot'
print re.findall('d[^ic]t',str1)

結(jié)果:

['dot', 'det', 'dot']

^作用二:^dit表示子串dit在開(kāi)頭位置,而dct不是在開(kāi)頭:

str1 = 'dit dot det,dct dit dot'
print re.findall('^dit',str1)
print re.findall('^dct',str1)

結(jié)果:

['dit'][]

$作用:dot$表示子串dot要在末尾位置,而dct不是在末尾:

str1 = 'dit dot det,dct dit dot'
print re.findall('dot$',str1)
print re.findall('dct$',str1)

結(jié)果:

['dot'][]

.作用:d.t表示d與t之間省略了一個(gè)任意字符:

str1 = 'dit dot det,dct dit dot'
print re.findall('d.t',str1)

結(jié)果:

['dit', 'dot', 'det', 'dct', 'dit', 'dot']

+作用:di+t表示d與t之間省略了一個(gè)或多個(gè)'i':

str1 = 'd dt dit diit det'
print re.findall('d.+t',str1)

結(jié)果:

['dit', 'diit']

*作用:di*t表示d與t之間省略了零個(gè)至多個(gè)'i':

str1 = 'd dt dit diit det'
print re.findall('d.*t',str1)

結(jié)果:

['dt', 'dit', 'diit']

經(jīng)常,'.'和'+'或者'*'搭配使用。'.+'表示省略了一個(gè)至多個(gè)任意元素,'.*'表示省略了零個(gè)至多個(gè)任意元素:

str1 = 'd dt dit diit det'
print re.findall('d.+t',str1)
print re.findall('d.*t',str1)

結(jié)果:

['d dt dit diit det']['d dt dit diit det']

?作用一:看.+的匹配結(jié)果,'dit'、'dot'也滿足'd.+t'的匹配條件,而輸出的卻是滿足匹配條件的最長(zhǎng)子串'dit dot det,dct dit dot',這個(gè)叫貪婪匹配。如果要輸出最短的匹配字串,只需在'+'后面加上'?':(注:對(duì)于'*'也是一樣,只需在'*'后面加上'?')

str1 = 'd dt dit diit det'
print re.findall('d.+?t',str1)

結(jié)果:

['dit', 'dot', 'det', 'dct', 'dit', 'dot']

?作用二:di?t表示i可有可無(wú),即dt、dit都滿足匹配條件:

str1 = 'd dt dit diit det'
print re.findall('di?t',str1)

結(jié)果:

['dt', 'dit']

{}作用一:di{n}t表示d和t之間有n個(gè)'i':

str1 = 'dt dit diit diiit diiiit'
print re.findall('di{2}t',str1)

結(jié)果:

['diit']

{}作用二:di{n,m}t表示d和t之間有n到m個(gè)'i':

str1 = 'dt dit diit diiit diiiit'
print re.findall('di{1,3}t',str1)

結(jié)果:

['dit', 'diit', 'diiit']

其中,n和m都是可以省略的。{n,}表示n個(gè)到任意個(gè);{,m}表示0個(gè)到m個(gè);{,}表示任意個(gè),和'*'功能一樣:

str1 = 'dt dit diit diiit diiiit'
print re.findall('di{1,}t',str1)
print re.findall('di{,3}t',str1)
print re.findall('di{,}t',str1)

結(jié)果:

['dit', 'diit', 'diiit', 'diiiit']
   ['dt', 'dit', 'diit', 'diiit']
   ['dt', 'dit', 'diit', 'diiit', 'diiiit']

\作用一:取消元字符,變成轉(zhuǎn)義字符:

str1 = '^abc ^abc'
print re.findall('^abc',str1)
print re.findall('\^abc',str1)

結(jié)果:

[]['^abc', '^abc']

\作用二:預(yù)定義字符

str1 = '12 abc 345 efgh'
print re.findall('\d+',str1)
print re.findall('\w+',str1)

結(jié)果:

['12', '345']
   ['12', 'abc', '345', 'efgh']

()作用:在匹配字符串后,只輸出匹配字串'()'里面的內(nèi)容:

str1 = '12abcd34'
print re.findall('12abcd34',str1)
print re.findall('1(2a)bcd34',str1)
print re.findall('1(2a)bc(d3)4',str1)

結(jié)果:

['12abcd34']
   ['2a']
   [('2a', 'd3')]

3、re模塊里的主要方法:findall()、finditer()、match()、search()、compile()、split()、sub()、subn()。

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

作用:在string中從左往右搜索與pattern匹配的字串,結(jié)果以list形式返回。

str1 = 'ab cd'
print re.findall('\w+',str1)

結(jié)果:['ab', 'cd']

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

作用:其功能與re.findall相同,但結(jié)果以迭代器的形式返回。

str1 = 'ab cd'
iter1 = re.finditer('\w+',str1)
for a in iter1:
  print a.group(),a.span()

結(jié)果:

ab (0, 2)
      cd (3, 5)

(注:a.group()返回滿足匹配調(diào)節(jié)的字串,a.span()返回字串的起始位置和末尾位置)

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

作用:在string中從左往右搜索與pattern匹配的字串,無(wú)匹配結(jié)果則返回None,否則返回一個(gè)search實(shí)例。

str1 = 'ab cd'
result = re.search('cd',str1)
if result == None:
  print 'None'
else:
  print result.group(),result.start(),result.end()

結(jié)果:cd 3 5

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

作用:判斷string的頭部是否與pattern匹配,是則返回match實(shí)例,否則返回None。

str1 = 'ab cd'
result = re.match('cd',str1)
if result == None:
  print 'None'
else:
  print result.group(),result.start(),result.end()

結(jié)果:None

re.compile(pattern,flags = 0)

作用:對(duì)匹配格式pattern進(jìn)行編譯,返回一個(gè)實(shí)例對(duì)象。對(duì)正則表達(dá)式先編譯,可以大幅提高匹配速度。

str1 = 'ab cd'
pre = re.compile('ab')
print pre.findall(str1)

結(jié)果:['ab']

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

作用:在string匹配pattern的時(shí)候做分割:

str1 = 'ab.c.de'
str2 = '12+34-56*78/90'
print re.split('\.',str1)
print re.split('[\+\-\*/]',str2)

結(jié)果:

['ab', 'c', 'de']
      ['12', '34', '56', '78', '90']

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

作用:在string當(dāng)中把滿足pattern正則的字串替換成repl:

str1 = 'abcde'
print re.sub('bc','123',str1)

結(jié)果:a123de

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

作用:其功能與re.sub()相同,但返回的結(jié)果多了一個(gè)數(shù)字,代表替換了多少次

str1 = 'abcdebce'
print re.subn('bc','123',str1)

結(jié)果:('a123de123e', 2)

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

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

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

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

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

相關(guān)文章

  • Python數(shù)據(jù)結(jié)構(gòu)與算法中的隊(duì)列詳解(1)

    Python數(shù)據(jù)結(jié)構(gòu)與算法中的隊(duì)列詳解(1)

    這篇文章主要為大家詳細(xì)介紹了Python的隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • python將類(lèi)似json的數(shù)據(jù)存儲(chǔ)到MySQL中的實(shí)例

    python將類(lèi)似json的數(shù)據(jù)存儲(chǔ)到MySQL中的實(shí)例

    今天小編就為大家分享一篇python將類(lèi)似json的數(shù)據(jù)存儲(chǔ)到MySQL中的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python如何獲取域名的SSL證書(shū)信息和到期時(shí)間

    Python如何獲取域名的SSL證書(shū)信息和到期時(shí)間

    在當(dāng)今互聯(lián)網(wǎng)時(shí)代,SSL證書(shū)的重要性不言而喻,它不僅為用戶提供了安全的連接,還能提高網(wǎng)站的搜索引擎排名,那我們?cè)趺床拍芡ㄟ^(guò)Python獲取域名的SSL證書(shū)信息和到期時(shí)間呢,下面小編就來(lái)簡(jiǎn)單講講吧
    2025-03-03
  • Python3實(shí)時(shí)操作處理日志文件的實(shí)現(xiàn)

    Python3實(shí)時(shí)操作處理日志文件的實(shí)現(xiàn)

    本文主要介紹了Python3實(shí)時(shí)操作處理日志文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 解決pandas報(bào)錯(cuò)'DataFrame' object has no attribute 'as_matrix'問(wèn)題

    解決pandas報(bào)錯(cuò)'DataFrame' object has no

    這篇文章主要介紹了解決pandas報(bào)錯(cuò)'DataFrame' object has no attribute 'as_matrix'問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python基礎(chǔ)教程之多線程編程詳解

    Python基礎(chǔ)教程之多線程編程詳解

    Python支持多線程編程和多進(jìn)程編程,在本教程中,我們將學(xué)習(xí)有關(guān)Python多線程編程的基礎(chǔ)知識(shí)、線程同步、線程池以及如何使用多進(jìn)程,需要的朋友可以參考下
    2023-06-06
  • python爬蟲(chóng)獲取百度首頁(yè)內(nèi)容教學(xué)

    python爬蟲(chóng)獲取百度首頁(yè)內(nèi)容教學(xué)

    在本篇內(nèi)容里小編給大家分享了關(guān)于python爬蟲(chóng)獲取百度首頁(yè)內(nèi)容教學(xué),需要的朋友們可以跟著學(xué)習(xí)下。
    2018-12-12
  • Python實(shí)現(xiàn)處理逆波蘭表達(dá)式示例

    Python實(shí)現(xiàn)處理逆波蘭表達(dá)式示例

    這篇文章主要介紹了Python實(shí)現(xiàn)處理逆波蘭表達(dá)式操作,結(jié)合實(shí)例形式分析了逆波蘭表達(dá)式的概念、原理及Python針對(duì)逆波蘭表達(dá)式的定義與計(jì)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • python3簡(jiǎn)單實(shí)現(xiàn)微信爬蟲(chóng)

    python3簡(jiǎn)單實(shí)現(xiàn)微信爬蟲(chóng)

    我們可以通過(guò)python 來(lái)實(shí)現(xiàn)這樣一個(gè)簡(jiǎn)單的爬蟲(chóng)功能,把我們想要的代碼爬取到本地。下面就看看如何使用python來(lái)實(shí)現(xiàn)這樣一個(gè)功能。
    2015-04-04
  • python Flask實(shí)現(xiàn)restful api service

    python Flask實(shí)現(xiàn)restful api service

    本篇文章主要介紹了python Flask實(shí)現(xiàn)restful api service,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12

最新評(píng)論

饶平县| 泸西县| 临桂县| 威宁| 都兰县| 安阳县| 兴和县| 广汉市| 涿鹿县| 昭觉县| 泌阳县| 将乐县| 崇礼县| 方正县| 班戈县| 仙居县| 中西区| 崇明县| 清水河县| 富宁县| 深圳市| 万年县| 安达市| 芷江| 漾濞| 和平区| 来安县| 五台县| 秦安县| 永清县| 岱山县| 马尔康县| 余干县| 永靖县| 钦州市| 尚义县| 毕节市| 临洮县| 将乐县| 方城县| 惠来县|