正規表示式之python實現
前文:
首先,什麼叫正規表示式(Regular Expression)?
例如我們要判斷字串"adi_e32fv,Ls"裡面是否含有子串"e32f",又例如我們在一個含百萬個姓名的txt檔案中找姓“王”,名字以“五”結尾的名字,然後列印出來。結果為:“王五”、“王小五”、“王大五”、“王小小五”……
以前我們是使用字串函式來查詢的,但是程式碼實現起來會很複雜。如今用正規表示式只需要一句 re.findall('王.*?五',txt1) 就可以了!正規表示式是寫網路爬蟲的最基本的知識,可以用正規表示式在html中搜集滿足某些字串要求的網址。下面是個人對正規表示式基礎知識的一些總結。
(操作環境:32位Win8系統,執行工具:python2.7.9+Eclipse.)
正文:
1、首先要匯入python的re模組。
2、元字元 . ^ $ * + ? {} [] \ | ()
re模組中的findall(str1,str2)方法返回字串str2中匹配str1格式的字串。例如在字串'dit dot det,dct dit dot'中匹配'dit'結果為:
str1 = 'dit dot det,dct dit dot'
print re.findall('dit',str1)
結果:['dit', 'dit']|作用:'dit|dct'表示dit或者dct。
<span style="font-family:KaiTi_GB2312;">str1 = 'dit dot det,dct dit dot'
print re.findall('dit|dct',str1)</span>
結果:['dit', 'dct', 'dit'][]作用:[ic]表示i或c,例如'd[ic]t'表示dit和dct兩者,和'dit|dct'等價:
str1 = 'dit dot det,dct dit dot'
print re.findall('d[ic]t',str1)
結果:['dit', 'dct', 'dit']^作用一:[^ic]中^表示否定,即除了i和c:
str1 = 'dit dot det,dct dit dot'
print re.findall('d[^ic]t',str1)
結果:['dot', 'det', 'dot']^作用二:^dit表示子串dit在開頭位置,而dct不是在開頭:
str1 = 'dit dot det,dct dit dot'
print re.findall('^dit',str1)
print re.findall('^dct',str1)
結果:['dit'][]$作用:dot$表示子串dot要在末尾位置,而dct不是在末尾:
str1 = 'dit dot det,dct dit dot'
print re.findall('dot$',str1)
print re.findall('dct$',str1)
結果:['dot'][]
.作用:d.t表示d與t之間省略了一個任意字元:
str1 = 'dit dot det,dct dit dot'
print re.findall('d.t',str1)
結果:['dit', 'dot', 'det', 'dct', 'dit', 'dot']+作用:di+t表示d與t之間省略了一個或多個'i':
str1 = '<span style="font-family: KaiTi_GB2312;">d dt dit diit det</span><span style="font-family: KaiTi_GB2312;">'</span>
print re.findall('d.+t',str1)
結果:['dit', 'diit']*作用:di*t表示d與t之間省略了零個至多個'i':
str1 = '<span style="font-family: KaiTi_GB2312;">d dt dit diit det</span><span style="font-family: KaiTi_GB2312;">'</span>
print re.findall('d.*t',str1)
結果:['dt', 'dit', 'diit']經常,'.'和'+'或者'*'搭配使用。'.+'表示省略了一個至多個任意元素,'.*'表示省略了零個至多個任意元素:
<span style="font-family:KaiTi_GB2312;">str1 = 'd dt dit diit det'
print re.findall('d.+t',str1)
print re.findall('d.*t',str1)</span>
結果:['d dt dit diit det']['d dt dit diit det']?作用一:看.+的匹配結果,'dit'、'dot'也滿足'd.+t'的匹配條件,而輸出的卻是滿足匹配條件的最長子串'dit dot det,dct dit dot',這個叫貪婪匹配。如果要輸出最短的匹配字串,只需在'+'後面加上'?':(注:對於'*'也是一樣,只需在'*'後面加上'?')
str1 = '<span style="font-family: KaiTi_GB2312;">d dt dit diit det'</span>
print re.findall('d.+?t',str1)
結果:['dit', 'dot', 'det', 'dct', 'dit', 'dot']?作用二:di?t表示i可有可無,即dt、dit都滿足匹配條件:
str1 = 'd dt dit diit det'
print re.findall('di?t',str1)
結果:['dt', 'dit']{}作用一:di{n}t表示d和t之間有n個'i':
str1 = 'dt dit diit diiit diiiit'
print re.findall('di{2}t',str1)
結果:['diit']
{}作用二:di{n,m}t表示d和t之間有n到m個'i':
str1 = 'dt dit diit diiit diiiit'
print re.findall('di{1,3}t',str1)
結果:['dit', 'diit', 'diiit']其中,n和m都是可以省略的。{n,}表示n個到任意個;{,m}表示0個到m個;{,}表示任意個,和'*'功能一樣:
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)
結果:['dit', 'diit', 'diiit', 'diiiit']['dt', 'dit', 'diit', 'diiit']
['dt', 'dit', 'diit', 'diiit', 'diiiit']
\作用一:取消元字元,變成轉義字元:
<span style="font-family:KaiTi_GB2312;">str1 = '^abc ^abc'
print re.findall('^abc',str1)
print re.findall('\^abc',str1)</span>
結果:[]['^abc', '^abc']\作用二:預定義字元
str1 = '12 abc 345 efgh'
print re.findall('\d+',str1)
print re.findall('\w+',str1)
結果:['12', '345']
['12', 'abc', '345', 'efgh']()作用:在匹配字串後,只輸出匹配字串'()'裡面的內容:
str1 = '12abcd34'
print re.findall('12abcd34',str1)
print re.findall('1(2a)bcd34',str1)
print re.findall('1(2a)bc(d3)4',str1)
結果:['12abcd34']['2a']
[('2a', 'd3')]
3、re模組裡的主要方法:findall()、finditer()、match()、search()、compile()、split()、sub()、subn()。
re.findall(pattern,string,flags = 0)
作用:在string中從左往右搜尋與pattern匹配的字串,結果以list形式返回。
<span style="font-family:KaiTi_GB2312;font-size:18px;">str1 = 'ab cd'
print re.findall('\w+',str1)</span>
結果:['ab', 'cd']re.finditer(pattern,string,flags = 0)
作用:其功能與re.findall相同,但結果以迭代器的形式返回。
<span style="font-family:KaiTi_GB2312;font-size:18px;">str1 = 'ab cd'
iter1 = re.finditer('\w+',str1)
for a in iter1:
print a.group(),a.span()</span>
結果:ab (0, 2)cd (3, 5)
(注:a.group()返回滿足匹配調節的字串,a.span()返回字串的起始位置和末尾位置)
re.search(pattern,string,flags = 0)
作用:在string中從左往右搜尋與pattern匹配的字串,無匹配結果則返回None,否則返回一個search例項。
<pre name="code" class="python"><span style="font-family:KaiTi_GB2312;font-size:18px;">str1 = 'ab cd'
result = re.search('cd',str1)
if result == None:
print 'None'
else:
print result.group(),result.start(),result.end()</span>
結果:cd 3 5re.match(pattern,string,flags = 0)
作用:判斷string的頭部是否與pattern匹配,是則返回match例項,否則返回None。
<span style="font-family:KaiTi_GB2312;font-size:18px;">str1 = 'ab cd'
result = re.match('cd',str1)
if result == None:
print 'None'
else:
print result.group(),result.start(),result.end()</span>
結果:Nonere.compile(pattern,flags = 0)
作用:對匹配格式pattern進行編譯,返回一個例項物件。對正規表示式先編譯,可以大幅提高匹配速度。
<span style="font-family:KaiTi_GB2312;font-size:18px;">str1 = 'ab cd'
pre = re.compile('ab')
print pre.findall(str1)</span>
結果:['ab']re.split(pattern,string,maxsplit = 0,flags = 0)
作用:在string匹配pattern的時候做分割:
<span style="font-family:KaiTi_GB2312;font-size:18px;">str1 = 'ab.c.de'
str2 = '12+34-56*78/90'
print re.split('\.',str1)
print re.split('[\+\-\*/]',str2)</span>
結果:['ab', 'c', 'de']['12', '34', '56', '78', '90']
re.sub(pattern,repl,string,count = 0,flags = 0)
作用:在string當中把滿足pattern正則的字串替換成repl:
<span style="font-family:KaiTi_GB2312;font-size:18px;">str1 = 'abcde'
print re.sub('bc','123',str1)</span>
結果:a123dere.subn(pattern,repl,string,count = 0,flags = 0)
作用:其功能與re.sub()相同,但返回的結果多了一個數字,代表替換了多少次
<span style="font-family:KaiTi_GB2312;font-size:18px;">str1 = 'abcdebce'
print re.subn('bc','123',str1)</span>
結果:('a123de123e', 2)轉載請註明出處,謝謝!(原文連結:http://blog.csdn.net/bone_ace/article/details/44471241)
相關文章
- python之正規表示式Python
- JS實現正規表示式JS
- Python 之 RE(正規表示式)常用Python
- Python基礎之正規表示式Python
- Python——正規表示式Python
- Python 正規表示式Python
- Python:正規表示式Python
- python正規表示式Python
- Python筆記五之正規表示式Python筆記
- Python正規表示式實現非捕獲分組Python
- Python正規表示式手稿Python
- Python正規表示式大全Python
- python的正規表示式Python
- python工具_正規表示式Python
- python 的正規表示式Python
- python 正規表示式匹配Python
- Python3之正規表示式詳解Python
- Python--之正規表示式一基礎Python
- python爬蟲之re正規表示式庫Python爬蟲
- java正規表示式之 groupJava
- 正規表示式之字元組字元
- Python學習筆記|Python之正規表示式Python筆記
- python正規表示式(re模組)Python
- 正規表示式(python3)Python
- python re模組 正規表示式Python
- Python 正規表示式 re 模組Python
- 詳解 Python 正規表示式Python
- Python正規表示式詳解Python
- Python正規表示式精講Python
- Python正規表示式基礎Python
- python基礎 之 正規表示式和re模組Python
- 正規表示式實踐文章
- 實戰JS正規表示式JS
- 正規表示式
- JS之正規表示式詳解JS
- 前端基礎之正規表示式前端
- 深入淺出之正規表示式
- php之正規表示式函式總結PHP函式