【发布时间】:2013-08-08 16:45:34
【问题描述】:
我有一个长字符串,看起来像:
s = 'label("id1","A") label("id1","B") label("id2", "C") label("id2","A") label("id2","D") label("id3","A")'
我想使用正则表达式根据 id 创建标签列表。
为了更清楚,从示例中的字符串s 中,我想得到一个结果列表,如下所示:
[("id1", ["A","B"]),
("id2", ["C","A","D"]),
("id3", ["A"])]
使用正则表达式我设法获取了 id 和元素:
import re
regex = re.compile(r'label\((\S*),(\S*)\)')
results = re.findall(regex,s)
使用此代码,results 看起来像:
[('"id1"', '"A"'),
('"id1"', '"B"'),
('"id2"', '"A"'),
('"id2"', '"D"'),
('"id3"', '"A"')]
有没有一种简单的方法可以从正则表达式中获取已经正确分组的数据?
【问题讨论】:
-
在想要的结果中,我将元素分组到一个列表中(例如 ["A","B"],但即使是元组或集合也可以!
-
id 总是排序的?
-
理想情况下,但我不会依赖它..
-
请注意,您的正则表达式会留下一堆(我认为不必要的)引号,并且您的代码不会捕获 id2:"C" 对,因为数据中的一个位置存在流氓空间。请参阅我的答案以解决这些问题。
-
嗨,Brionius,实际上我需要引号。我假设的空间是一个错字,但在我的情况下本质上不是问题:)
标签: python regex regex-group