仅对字符串中括号内的内容进行排序

时间:2019-06-12 10:22:28

标签: regex python-3.x

s = "Kadu (b, a), Dadu, Adu (y, i)"

我需要将此字符串排序如下:

Adu (i, y), Dadu, Kadu (a, b)

需要更多时间的人的额外说明:作为翻译,我有时不得不翻译按字母顺序排序,以逗号分隔的列表,其中某些项目的括号中有子列表,也按字母顺序排序。翻译后,字母顺序会发生变化,因此我必须使用Word之类的原始工具来重新处理一切。我正在尝试为自己编写一些代码,可以帮助我实现自动化。我对编码非常陌生,我基本上只能使用在这里找到但正在学习的东西来做补丁。

由于我在Python中使用了一些Regex代码,因此我能够以正确的方式拆分字符串,对其进行排序,然后重新加入列表。 截至目前,我已经能够做到这一点:

Adu (y, i), Dadu, Kadu (b, a)

如您所见,主列表排序良好,但括号内的内容保持不变。

import re
s = "Kadu (b, a), Dadu, Adu (y, i)"
unsorted = re.split(r',\s*(?![^()]*\))', s)
unsorted.sort()
result = ", "
result = result.join(unsorted)
print(result)

现在我想我需要编写一些仅处理括号中内容的Regex代码。我找不到适合我的代码。有人知道我应该怎么做吗?

1 个答案:

答案 0 :(得分:2)

您可以将re.sub与回调函数一起使用,以找到(...)中的部分并将其替换为自身的排序版本。

>>> ', '.join(sorted(re.sub("(?<=\().+(?=\))", lambda m: ', '.join(sorted(m .group().split(', '))), x) for x in re.split(r',\s*(?![^()]*\))', s))) 
'Adu (i, y), Dadu, Kadu (a, b)'