re模塊

正則表達式:能夠匹配文本片斷的模式(匹配模式pattern)python

字符串也是一種簡單的正則表達式正則表達式

 

通配符(能夠匹配任何字符):.函數

如'.ython'能夠匹配'python', 也能夠匹配'jython'this

 

字符集:用中括號[]括起來的字符集spa

如'[a-z]','[0-9]','[a-z-0-9]'分別表示字符a到z,0到9,a到z和0到9的任意一個code

 

子模式(subpattern):模式中的一部分,用括號括起來對象

如'py(tho)n','tho'爲一個子模式,也叫組(group),組序號取決於他左側的括號數,整個模式字符串爲第0組('python'),'tho'爲第1組(左側1個括號)blog

 

(pattern)*:容許模式重複0次或屢次字符串

(pattern)+:容許模式重複1次或屢次string

(pattern){m, n}:容許模式重複m到n次

如'py(tho)+n'表示中間的'tho'(第1組)能夠重複1次或屢次,能夠匹配'python',也能夠匹配'pythothothon'

 

反轉字符集:^

如'[^abc]'表示能夠匹配除a,b,c外的任何字符(注意加中括號!)

注意:若^出如今模式的開頭,須要對其進行轉義

 

管道符號:|(或)

如'p(ython|attern)'可匹配'python',也可匹配'pattern'

 

轉意符號(對特殊字符進行轉義):\

若是模式中有.,+,-,*,^,|,]等對匹配模式有特殊意義的符號,則須要進行轉義,如模式'www\.python\.org'中的.表示字符'.',而不是通配符

 

可選項:在子模式的括號外加?號,表示這個子模式無關緊要

如r'(http://)?(www\.)?python\.org'

能夠匹配如下字符串:

'http://www.python.org'

'http://python.org'

'www.python.org'

'python.org'

注意:若是?號在子模式的括號內,表示非貪婪模式,默認狀況下是貪婪模式,指出現重複運算符時,會盡量多的匹配,

如pattern = r'\*(.+)\*',遇到子字符串'*this* is *it*!'時,匹配的是最前面和最後面的*號,

若是令pattern = r'\*(.+?)\*',?號在括號內,則表示非貪婪模式,儘量少的匹配,會匹配前兩個*號,再匹配後兩個*號

 

匹配字符串開頭或結尾:若是隻想匹配在開頭或結尾出現模式的字符串,模式能夠用^(開頭)或$(結尾)

如pattern = '^ht+p'(注意不一樣於反轉字符集)會匹配'http://python.org','htttttttp://python.org',但不會匹配'python.http://org'

同理'$ht+p'會會匹配在結尾處出現模式的字符串

 

re.compile(pattern[, flags])

將以字符串形式寫的pattern轉爲真正的模式對象

如:

1  pattern = re.compile(r'''
2       \*               # some text
3       ([^\*]+)     # some text 
4       \*               # some text
5        ''', re.VERBOSE)

表示字符串'\*([^\*]+)\*'被轉換爲匹配模式,VERBOSE表示re會忽略在模式中添加的空白(空白字符,tab,換行符等)

 

re.search(pattern, string[, flags])  或者  pat.search(string)

在字符串中尋找和模式相匹配的第一個子字符串,若能找到會返回MatchObject(值爲Ture),不然返回None(值爲False),如:

1 if re.search(pat, string):
2     print('found it!')

 

re.match(pattern, string[, flags])

在給定字符串開頭處匹配,有就返回MatchObject(值爲Ture),不然返回None(值爲False),

如re,match('p', 'python')返回MatchObject,re.match('p', 'www.python.org')返回None

 

re.split(pattern, string[, maxsplit=0])

用與模式相匹配的匹配項來分割字符串,如:

1 some_text = 'alpha, beta,,,, gamma delta'
2 print(re.split(',+', some_text))

結果:

['alpha', ' beta', ' gamma delta']

若是改爲:

1 some_text = 'alpha, beta,,,, gamma delta'
2 print(re.split('[, ]+', some_text))

結果:

['alpha', 'beta', 'gamma', 'delta']

(若是模式包含小括號,括起來的字符組合會散佈在分割後的子字符串之間)

 

re.findall(pattern, string)

以列表形式列出給定模式的全部匹配項

 

re.sub(pat, repl, string[, count=0])

用給定的替換式(repl)替換字符串string中的與pat相匹配的匹配項,返回替換後的string。如:

1 pat = '{name}'
2 text = 'dear {name}'
3 print(re.sub(pat, 'Mr.Tan', text))

結果:

dear Mr.Tan

 

re.escape(string)

對字符串中全部可能被解釋爲正則運算符的字符進行轉義,如:

1 pat = re.escape('www.(python)+.org')
2 print(pat)
3 text = 'www.python.org or www.pythonpython.org or www.(python)+.org will be replaced'
4 print(re.sub(pat, 'something', text))

結果:

www\.\(python\)\+\.org
www.python.org or www.pythonpython.org or something will be replaced

 

匹配對象和組:

match,split,findall等能對字符串進行模式匹配的函數在找到匹配項後都會返回MatchObject對象,這些對象也包含匹配模式中與子模式相對應的

子字符串的信息和組(group)信息

group([group1, ...])     獲取給定子模式(組)的匹配項

start([group])              返回給定組的匹配項在字符串中的開始位置

end([group])               返回給定組的匹配項在字符串中的結束位置

span([group])             返回一個組的開始和結束位置

如:

1 m = re.match('www\.(.*)\.(.{3})', 'www.python.org')
2 print(m)
3 print(m.group(1), m.group(2))
4 print(m.start(1), m.end(1), m.span(1))

結果:

<_sre.SRE_Match object; span=(0, 14), match='www.python.org'>
python org
4 10 (4, 10)

re.sub()一個強大的功能:在替換內容(repl)中使用'\\n'表示repl中\\n處插入匹配項中第n組的子字符串!再用插入後的repl來替換匹配項!如:

1 emphasis_pat = r'\*([^\*]+)\*'
2 text = 'hello, *world*!'
3 print(re.sub(emphasis_pat, '<em>\\1</em>', text))

結果:

hello, <em>world</em>!
相關文章
相關標籤/搜索