python import re_Python标准库笔记(2) — re模块
re模塊提供了一系列功能強(qiáng)大的正則表達(dá)式(regular expression)工具,它們?cè)试S你快速檢查給定字符串是否與給定的模式匹配(match函數(shù)), 或者包含這個(gè)模式(search函數(shù))。正則表達(dá)式是以緊湊(也很神秘)的語(yǔ)法寫(xiě)出的字符串模式。
Python版本: 2.x
1、模塊方法
2、匹配語(yǔ)法
正則表達(dá)式適用于所有編程語(yǔ)言,并不是Python特有的,下面的語(yǔ)法介紹來(lái)自于這位博
主的歸納:
3、方法使用re.match(pattern, string, flags=0)
從字符串的開(kāi)始匹配,如果pattern匹配到就返回一個(gè)Match對(duì)象實(shí)例(Match對(duì)象在后面描述),否則放回None。flags為匹配模式(會(huì)在下面描述),用于控制正則表達(dá)式的匹配方式。
import re
a = 'abcdefg'
print re.match(r'abc', a) # 匹配成功
print re.match(r'abc', a).group()
print re.match(r'cde', a) # 匹配失敗
>>><_sre.SRE_Match object at 0x0000000001D94578>
>>>abc
>>>None
search(pattern, string, flags=0)
用于查找字符串中可以匹配的子串,如果找到就返回對(duì)應(yīng)的Match對(duì)象實(shí)例,否則返回None。它和math的區(qū)別是math只匹配開(kāi)頭。
import re
a = 'abcdefg'
print re.search(r'bc', a)
print re.search(r'bc', a).group()
print re.search(r'123', a)
>>><_sre.SRE_Match object at 0x0000000001D94578>
>>>bc
>>>None
sub(pattern, repl, string, count=0, flags=0)
跟sub()函數(shù)一樣,只是它返回的是一個(gè)元組,包含新字符串和匹配到的次數(shù)。
import re
a = 'a1b2c3'
print re.subn(r'\d+', '0', a) # 將數(shù)字替換成'0'
>>>('a0b0c0', 3)
split(pattern, string, maxsplit=0, flags=0)
升級(jí)版的split(),用pattern匹配的子串來(lái)分割string,如果pattern里使用了圓括號(hào),那么被pattern匹配到的串也將作為返回值列表的一部分,maxsplit為最多被分割的字符串個(gè)數(shù)。
import re
a = 'a1b2c'
print re.split(r'\d', a)
print re.split(r'(\d)', a)
>>>['a', 'b', 'c']
>>>['a', '1', 'b', '2', 'c']
findall(pattern, string, flags=0)
以列表的形式返回string里pattern匹配的子串。
import re
a = 'a1b2c3d4'
print re.findall('\d', a)
>>>['1', '2', '3', '4']
4、Match對(duì)象
re.match()、re.search()成功匹配的話都會(huì)返回一個(gè)Match對(duì)象,它包含了關(guān)于此次匹配的信息,可以使用Match提供的屬性或方法來(lái)獲取這些信息。例如:
import re
m = re.match(r'(\w+) (\w+)(?P.*)', 'hello world!')
print "m.string:", m.string
print "m.re:", m.re
print "m.pos:", m.pos
print "m.endpos:", m.endpos
print "m.lastindex:", m.lastindex
print "m.lastgroup:", m.lastgroup
print "m.group(1,2):", m.group(1, 2)
print "m.groups():", m.groups()
print "m.groupdict():", m.groupdict()
print "m.start(2):", m.start(2)
print "m.end(2):", m.end(2)
print "m.span(2):", m.span(2)
print r"m.expand(r'\2 \1\3'):", m.expand(r'\2 \1\3')
### output ###
# m.string: hello world!
# m.re: <_sre.SRE_Pattern object at 0x016E1A38>
# m.pos: 0
# m.endpos: 12
# m.lastindex: 3
# m.lastgroup: sign
# m.group(1,2): ('hello', 'world')
# m.groups(): ('hello', 'world', '!')
# m.groupdict(): {'sign': '!'}
# m.start(2): 6
# m.end(2): 11
# m.span(2): (6, 11)
# m.expand(r'\2 \1\3'): world hello!
5、Pattern對(duì)象
Pattern對(duì)象對(duì)象由re.compile()生成,它帶有許多re模塊的同名方法,而且方法用處也是一樣的。例如:
>>>import re
>>>pa = re.compile('(d\+)')
>>>print pa.split('he has 2 books and 1 pen')
['he has ', '2', ' books and ', '1', ' pen']
>>>print pa.findall('he has 2 books and 1 pen')
['2', '1']
>>>print pa.sub('much', 'he has 2 books and 1 pen')
he has much books and much pen
6、匹配模式
匹配模式取值可以使用按位或運(yùn)算符'|'表示同時(shí)生效,比如re.I | re.M, 下面是常見(jiàn)的一些flag。re.I(re.IGNORECASE): 忽略大小寫(xiě)
>>pa = re.compile('abc', re.I)
>>>pa.findall('AbCdEfG')
>>>['AbC']
re.L(re.LOCALE):字符集本地化
這個(gè)功能是為了支持多語(yǔ)言版本的字符集使用環(huán)境的,比如在轉(zhuǎn)義符\w,在英文環(huán)境下,它代表[a-zA-Z0-9],即所以英文字符和數(shù)字。如果在一個(gè)法語(yǔ)環(huán)境下使用,有些法語(yǔ)字符串便匹配不上。加上這L選項(xiàng)和就可以匹配了。不過(guò)這個(gè)對(duì)于中文環(huán)境沒(méi)有什么用,它仍然不能匹配中文字符。
re.M(re.MULTILINE): 多行模式,改變'^'和'$'的行為
>>>pa = re.compile('^\d+')
>>>pa.findall('123 456\n789 012\n345 678')
>>>['123']
>>>pa_m = re.compile('^\d+', re.M)
>>>pa_m.findall('123 456\n789 012\n345 678')
>>>['123', '789', '345']
re.S(re.DOTALL): 點(diǎn)任意匹配模式,改變'.'的行為
點(diǎn)號(hào)將匹配所有的字符。缺省情況下.匹配除換行符\n外的所有字符,使用這一選項(xiàng)以后,點(diǎn)號(hào)就能匹配包括換行符的任何字符。
re.U(re.UNICODE): 根據(jù)Unicode字符集解析字符
re.X(re.VERBOSE): 詳細(xì)模式
# 這個(gè)模式下正則表達(dá)式可以是多行,忽略空白字符,并可以加入注釋。以下兩個(gè)正則表達(dá)式是等價(jià)的
a = re.compile(r"""\d + # the integral part\. # the decimal point\d * # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
# 但是在這個(gè)模式下,如果你想匹配一個(gè)空格,你必須用'/ '的形式('/'后面跟一個(gè)空格)
總結(jié)
以上是生活随笔為你收集整理的python import re_Python标准库笔记(2) — re模块的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python表格对齐_python st
- 下一篇: python数据分析基础教程考试试卷_P