gpt4 book ai didi

python - 根据正则表达式中的标识符对元素进行分组

转载 作者:太空宇宙 更新时间:2023-11-03 18:52:01 25 4
gpt4 key购买 nike

我有一个长字符串,如下所示:

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)

使用此代码,结果如下所示:

[('"id1"', '"A"'),
('"id1"', '"B"'),
('"id2"', '"A"'),
('"id2"', '"D"'),
('"id3"', '"A"')]

有没有一种简单的方法可以从正则表达式中获取已经正确分组的数据?

最佳答案

您可以循环 findall() 结果并将它们收集在 collections.defaultdict object 中。不过,请调整正则表达式以不包含引号,并添加一些空格容差:

from collections import defaultdict
import re

regex = re.compile(r'label\("([^"]*)",\s*"([^"]*)"\)')
results = defaultdict(list)

for id_, tag in regex.findall(s):
results[id_].append(tag)

print results.items()

如果您想要的只是,您可以将 list 替换为 set 并将 append() 替换为 add()独特的值(value)观。

演示:

>>> from collections import defaultdict
>>> import re
>>> s = 'label("id1","A") label("id1","B") label("id2", "C") label("id2","A") label("id2","D") label("id3","A")'
>>> regex = re.compile(r'label\("([^"]*)",\s*"([^"]*)"\)')
>>> results = defaultdict(list)
>>> for id_, tag in regex.findall(s):
... results[id_].append(tag)
...
>>> results.items()
[('id2', ['C', 'A', 'D']), ('id3', ['A']), ('id1', ['A', 'B'])]

如果需要,您也可以对此结果进行排序。

关于python - 根据正则表达式中的标识符对元素进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18131574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com