python中多次出现的正则表达式

时间:2014-10-01 09:18:47

标签: python regex

我需要解析具有多个语言代码的行,如下所示

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 个答案:

答案 0 :(得分:3)

分两步完成。第一个单独的ID来自名称/语言对;然后在名称/语言部分使用re.finditer迭代对,并将它们填入dict。

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

答案 1 :(得分:2)

\b(\d+)\b\s*|(.*?)(?=<)<(.*?)>

试试这个。只需抓住captures.see演示。

http://regex101.com/r/hS3dT7/4