RegexObject
實例有一些方法和屬性。這裏只顯示了最重要的幾個,若是要看完整的列表請查閱 Python Library Referencepython
方法/屬性 | 做用 |
---|---|
match() | 決定 RE 是否在字符串剛開始的位置匹配 |
search() | 掃描字符串,找到這個 RE 匹配的位置 |
findall() | 找到 RE 匹配的全部子串,並把它們做爲一個列表返回 |
finditer() | 找到 RE 匹配的全部子串,並把它們做爲一個迭代器返回 |
若是沒有匹配到的話,match() 和 search() 將返回 None。若是成功的話,就會返回一個 MatchObject
實例,其中有此次匹配的信息:它是從哪裏開始和結束,它所匹配的子串等等。api
你能夠用採用人機對話並用 re 模塊實驗的方式來學習它。若是你有 Tkinter 的話,你也許能夠考慮參考一下 Tools/scripts/redemo.py,一個包含在 Python 發行版裏的示範程序。學習
首先,運行 Python 解釋器,導入 re 模塊並編譯一個 RE:spa
#!python Python 2.2.2 (#1, Feb 10 2003, 12:57:01) >>> import re >>> p = re.compile('[a-z]+') >>> p <_sre.SRE_Pattern object at 80c3c28>
如今,你能夠試着用 RE 的 [a-z]+ 去匹配不一樣的字符串。一個空字符串將根本不能匹配,由於 + 的意思是 「一個或更多的重複次數」。 在這種狀況下 match() 將返回 None,由於它使解釋器沒有輸出。你能夠明確地打印出 match() 的結果來弄清這一點。code
#!python >>> p.match("") >>> print p.match("") None
如今,讓咱們試着用它來匹配一個字符串,如 "tempo"。這時,match() 將返回一個 MatchObject。所以你能夠將結果保存在變量裏以便後面使用。索引
#!python >>> m = p.match( 'tempo') >>> print m <_sre.SRE_Match object at 80c4f68>
如今你能夠查詢 MatchObject
關於匹配字符串的相關信息了。MatchObject 實例也有幾個方法和屬性;最重要的那些以下所示:ip
方法/屬性 | 做用 |
---|---|
group() | 返回被 RE 匹配的字符串 |
start() | 返回匹配開始的位置 |
end() | 返回匹配結束的位置 |
span() | 返回一個元組包含匹配 (開始,結束) 的位置 |
試試這些方法不久就會清楚它們的做用了:字符串
#!python >>> m.group() 'tempo' >>> m.start(), m.end() (0, 5) >>> m.span() (0, 5)
group() 返回 RE 匹配的子串。start() 和 end() 返回匹配開始和結束時的索引。span() 則用單個元組把開始和結束時的索引一塊兒返回。由於匹配方法檢查到若是 RE 在字符串開始處開始匹配,那麼 start() 將老是爲零。然而, RegexObject
實例的 search 方法掃描下面的字符串的話,在這種狀況下,匹配開始的位置就也許不是零了。string
#!python >>> print p.match('::: message') None >>> m = p.search('::: message') ; print m <re.MatchObject instance at 80c9650> >>> m.group() 'message' >>> m.span() (4, 11)
在實際程序中,最多見的做法是將 MatchObject
保存在一個變量裏,然後檢查它是否爲 None,一般以下所示:it
#!python p = re.compile( ... ) m = p.match( 'string goes here' ) if m: print 'Match found: ', m.group() else: print 'No match'
兩個 RegexObject
方法返回全部匹配模式的子串。findall()返回一個匹配字符串行表:
#!python >>> p = re.compile('\d+') >>> p.findall('12 drummers drumming, 11 pipers piping, 10 lords a-leaping') ['12', '11', '10']
findall() 在它返回結果時不得不建立一個列表。在 Python 2.2中,也能夠用 finditer() 方法。
#!python >>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...') >>> iterator <callable-iterator object at 0x401833ac> >>> for match in iterator: ... print match.span() ... (0, 2) (22, 24) (29, 31)