Regex: как использовать re.sub с переменным количеством элементов? - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь заменить шаблоны {x; y} в текстовом корпусе на «x или y», за исключением того, что количество элементов является переменным, поэтому иногда может быть 3 или более элементов, т.е. {x; y;z} (макс. 9).

Я пытаюсь сделать это с помощью регулярных выражений, но я не уверен, как это сделать так, чтобы я мог заменить в соответствии с количеством присутствующих элементов.Таким образом, я имею в виду, например, если я использую регулярное выражение с переменным компонентом, например, следующимпеременные элементы), когда в фигурных скобках присутствуют только 2 элемента, чего я не хочу.Альтернатива состоит в том, чтобы сделать это много раз с различным количеством переменных частей, но код будет очень неуклюжим.Мне интересно, есть ли способы, которыми я мог бы достичь этого с помощью методов регулярных выражений?Буду признателен за любые идеи.

Я использую python3.5 с spyder.

1 Ответ

0 голосов
/ 16 октября 2018

Сценарий слишком сложен для обычного действия поиска и замены, поэтому я рекомендую передать функцию для динамического создания строки замены.

import re

text = 'There goes my {cat;dog} playing in the {street;garden}.'

def replacer(m):
    return m.group(1).replace(';', ' or ')

output = re.sub(r'\{((\w;?)*\w)\}', replacer, text)

print(output)

Вывод:

Идет моя кошка или собака, играющая на улице или в саду.

...