сортировка только того, что в скобках в строке - PullRequest
0 голосов
/ 12 июня 2019
s = "Kadu (b, a), Dadu, Adu (y, i)"

Мне нужно, чтобы эта строка была отсортирована следующим образом:

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

Дополнительное объяснение для тех, у кого есть еще одна минута: как переводчик, мне иногда приходится переводить отсортированные по алфавиту списки, разделенные запятыми, в которых некоторые элементы имеют подсписки в скобках, также отсортированные по алфавиту. После перевода алфавитный порядок меняется, поэтому мне приходится прибегать ко всем, используя примитивные инструменты, такие как Word. Я пытаюсь написать себе код, который может помочь мне автоматизировать это. Я очень новичок в программировании, я могу делать только пэчворк, используя то, что нахожу здесь, но я учусь.

Благодаря некоторому коду Regex, который я использовал в Python, я смог правильно разделить строку, отсортировать ее и затем снова присоединиться к списку. На данный момент я могу получить это:

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 Ответ

2 голосов
/ 12 июня 2019

Вы можете использовать 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)'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...