簡體   English   中英

正則表達式分組

[英]Grouping in Regular Expression

我對python分組感到完全困惑。 例如:

import re

m = re.search('From:\s+(.+)\s+To:\s+(.*)\s*', 'From: Toronto To: Beijing')
print m.group(0)
print m.group(1)
print m.group(2)

運行此程序后,我可以得到3個結果,但是我不知道為什么會得到這樣的結果:

From: Toronto To: Beijing
Toronto
Beijing 

另外,有時當我使用匹配對象的group方法時,我會得到警告,提示“沒有這樣的分組”。

因此,有人可以用簡單的語言向我解釋正則表達式分組的用法嗎?

當您在正則表達式中使用括號時,這表示一個組。 您執行了兩次,這些組的名稱從1開始,並在正則表達式中從左到右讀取。

組0是整個比賽的特殊組。

要使組不匹配,請使用(?:something) 演示:

>>> s = '12 34 56'
>>> m = re.search('(\d+)\s+(?:\d+)\s+(\d+)', s)
>>> m.group(0) # everything
'12 34 56'
>>> m.group(1) # content of first matching group
'12'
>>> m.group(2) # content of second matching group
'56'

m.groups()將按順序為您提供所有匹配組的內容:

>>> m.groups()
('12', '56')

您可能已經知道,在正則表達式中使用括號會創建一個捕獲組(除非您告訴它不要這樣做,在這種情況下,它將是一個非捕獲組)。 因此,在呈現的正則表達式中,您有第0個組,它始終是它捕獲的完整字符串,第一個組對應於(.+) ,第二個組對應於(.*)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM