2014-10-01 28 views
3

多个occurances表达我需要解析具有多个语言代码行,如下经常用于在python

008800002  Bruxelles-Nord$Br�ussel Nord$<deu>$Brussel Noord$<nld> 
  • 008800002是一个ID
  • Bruxelles-Nord$Br�ussel Nord$是NAME1
  • deu是语言一个
  • $Brussel Noord$被称为两个
  • nld是语言二。

因此,想法是名称和语言可以出现N次。我需要收集他们。 <>中的语言长度为3个字符(固定) ,所有名称以$结尾。

我试过这个,但它没有给出预期的输出。

x = re.compile('(?P<stop_id>\d{9})\s(?P<authority>[[\x00-\x7F]{3}|\s{3}])\s(?P<stop_name>.*) 
    (?P<lang_code>(?:[<]\S{0,4}))',flags=re.UNICODE) 

我不知道如何获得重复的元素。 需要

Bruxelles-Nord$Br�ussel Nord$<deu>$Brussel Noord$作为stop_name和<nld>作为语言。

+2

您可能想先解决编码问题。它是'Brüssel',而不是'Br ussel'。 – georg 2014-10-01 09:48:39

回答

3

做它在两个步骤。首先从名称/语言对中分离ID;然后在名称/语言部分使用re.finditer来迭代对,并将它们填入字典中。

import re 

line = u"008800002  Bruxelles-Nord$Br�ussel Nord$<deu>$Brussel Noord$<nld>" 
m = re.search("(\d+)\s+(.*)", line, re.UNICODE) 
id = m.group(1) 
names = {} 
for m in re.finditer("(.*?)<(.*?)>", m.group(2), re.UNICODE): 
    names[m.group(2)] = m.group(1) 
print id, names