一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - python實現(xiàn)的正則表達(dá)式功能入門教程【經(jīng)典】

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

2020-11-14 00:53九茶 Python

這篇文章主要介紹了python實現(xiàn)的正則表達(dá)式功能,詳細(xì)分析了Python正則表達(dá)式中常用的各種符號、函數(shù)等的使用方法與注意事項,需要的朋友可以參考下

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

前文:

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

例如我們要判斷字符串"adi_e32fv,Ls"里面是否含有子串"e32f",又例如我們在一個含百萬個姓名的txt文件中找姓“王”,名字以“五”結(jié)尾的名字,然后打印出來。結(jié)果為:“王五”、“王小五”、“王大五”、“王小小五”……

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

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

正文:

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

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

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

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

結(jié)果:

?
1
['dit', 'dit']

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

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

結(jié)果:

?
1
['dit', 'dct', 'dit']

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

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

結(jié)果:

?
1
['dit', 'dct', 'dit']

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

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

結(jié)果:

?
1
['dot', 'det', 'dot']

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

?
1
2
3
str1 = 'dit dot det,dct dit dot'
print re.findall('^dit',str1)
print re.findall('^dct',str1)

結(jié)果:

?
1
['dit'][]

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

?
1
2
3
str1 = 'dit dot det,dct dit dot'
print re.findall('dot$',str1)
print re.findall('dct$',str1)

結(jié)果:

?
1
['dot'][]

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

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

結(jié)果:

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

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

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

結(jié)果:

?
1
['dit', 'diit']

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

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

結(jié)果:

?
1
['dt', 'dit', 'diit']

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

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

結(jié)果:

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

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

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

結(jié)果:

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

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

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

結(jié)果:

?
1
['dt', 'dit']

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

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

結(jié)果:

?
1
['diit']

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

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

結(jié)果:

?
1
['dit', 'diit', 'diiit']

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

?
1
2
3
4
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é)果:

?
1
2
3
['dit', 'diit', 'diiit', 'diiiit']
   ['dt', 'dit', 'diit', 'diiit']
   ['dt', 'dit', 'diit', 'diiit', 'diiiit']

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

?
1
2
3
str1 = '^abc ^abc'
print re.findall('^abc',str1)
print re.findall('\^abc',str1)

結(jié)果:

?
1
[]['^abc', '^abc']

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

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

結(jié)果:

?
1
2
['12', '345']
   ['12', 'abc', '345', 'efgh']

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

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

結(jié)果:

?
1
2
3
['12abcd34']
   ['2a']
   [('2a', 'd3')]

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

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

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

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

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

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

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

?
1
2
3
4
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匹配的字串,無匹配結(jié)果則返回None,否則返回一個search實例。

?
1
2
3
4
5
6
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實例,否則返回None。

?
1
2
3
4
5
6
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)

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

?
1
2
3
str1 = 'ab cd'
pre = re.compile('ab')
print pre.findall(str1)

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

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

作用:在string匹配pattern的時候做分割:

?
1
2
3
4
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:

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

結(jié)果:a123de

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

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

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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女扒开尿口让男生添 漫画 | 99re在线精品视频免费 | 欧美三级做爰全过程 | 奇米影视先锋 | 免费一级特黄特色大片∵黄 | 极品ts赵恩静和直男激战啪啪 | 欧美一级特黄特色大片免费 | 玩高中女同桌肉色短丝袜脚文 | 2019天天干天天操 | 五月天婷婷网亚洲综合在线 | 啊啊啊好大在线观看 | 91麻豆国产福利在线观看 | 俄罗斯美女破苞 | 国产成人手机在线好好热 | 艹逼的视频 | 亚洲黄色小视频 | 男女小视频在线观看 | 奇米影视欧美 | 免费在线观看视频 | 猥琐对着美女飞机喷到脸上 | 恩不要好大好硬好爽3p | 天堂网在线.www天堂在线资源 | 国产成人精品三级在线 | 校园刺激全黄H全肉细节文 校草让我脱了内裤给全班看 | 国自产拍在线天天更新91 | 好男人社区www影院在线观看 | 深夜影院深a久久 | 2018天天拍拍拍免费视频 | 国产高清视频免费最新在线 | 亚洲精品一区二区三区中文字幕 | 日本性漫画 | 国产一区二区三区高清视频 | 日本三级s级在线播放 | 538亚洲欧美国产日韩在线精品 | 成人123 | 香蕉eeww99国产在线观看 | 欧美日韩va | 任你操视频在线观看 | 关晓彤被调教出奶水的视频 | 国产精品久久久久毛片真精品 | 免费尤物视频 |