2015-09-14 37 views
0

在Python中,你可以有一個正則表達式與命名組,如:確定名爲組號碼的Python正則表達式?

m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds") 

你可以查找的命名組匹配的文本通過名稱或使用groupdict

In [202]: m.group("first_name") 
Out[202]: 'Malcolm' 

In [203]: m.groupdict() 
Out[203]: {'first_name': 'Malcolm', 'last_name': 'Reynolds'} 

如果我想要指定組的偏移量,我需要知道它們是哪個組編號,所以我可以使用類似start(1)的東西。我如何才能找出指定組和組號之間的映射關係?如果它們匹配相同的字符串,則無法毫不含糊地推斷。

這樣做的目的是能夠推斷具有原始正則表達式的特定知識的函數中的命名註釋跨度(帶有偏移量)。

+0

字典無序,所以這沒有多大意義。你想達到什麼目的? – jonrsharpe

+0

這些羣體有抵消他們沒有?我如何找到指定組的偏移量? –

回答

2

請注意,您可以將組名稱設置爲start而不是索引。

>>> m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds") 
>>> m.start('last_name') 
8 

因此,它可能沒有必要爲你映射的組名,以它的索引。

3

如果您使用編譯的正則表達式,您可以獲取組名以進行索引映射。 像這樣:

p = re.compile(r"(?P<first_name>\w+) (?P<last_name>\w+)") 
print p.groupindex 

結果:

{'first_name': 1, 'last_name': 2} 
0

並不清楚你想達到什麼樣的,但萬一有幫助,這裏有2個有用的東西:

  1. 匹配對象m有一個groups方法將返回一個元組到匹配的字符串。您可以使用整數偏移量。
  2. 定義組名的元組第一名:

    group_names = ("first_name", "last_name")

    然後使用字符串格式化函數來創建重:

    m = re.match(r"(?P<{0}>\w+) (?P<{1}>\w+)".format(*group_names), "Malcolm Reynolds")

    從現在起,你有一個唯一索引爲group_names。