Как заменить слова в скобках и перед скобками с помощью Python

Как я могу заменить слова, в скобках которых написано «или что-то в этом роде»?

Пример:

string = "acısı içine (or yüreğine) çökmek (or işlemek)"

Ожидаемый результат:

'acısı içine çökmek' , 'acısı yüreğine çökmek' , 'acısı içine işlemek' , 'acısı yüreğine çökmek'

Я пытаюсь написать что-то вроде ниже, но это не работает, если существует более одной круглой скобки.

import re
word='abat etmek (or eylemek)'
item1=re.sub("\([^)]+\)","",word)
parenthesis=re.search('\(([^)]+)', word).group(1)
par=parenthesis.split('or')
item2=item1.replace(item1.split()[-1],par[1])

здесь вы можете получить помощь по регулярным выражениям: stackoverflow.com/questions/4736/…

Grant Williams 01.05.2018 16:24

Добро пожаловать в StackOverflow. Хотя есть люди, желающие помочь, вы должны хотя бы сами проявить некоторые усилия. Какой код вы использовали, где застряли? Imo, это включает в себя двухэтапный подход: получение рассматриваемых слов, например, import re; rx = re.compile(r'\(or\s+([^()]+)\)\s*'); words = [m.group(1) for m in rx.finditer(string)] и свод правил, что делать потом. Наконец (большинство людей здесь не говорят по-турецки), более вероятно, что они получат ответ на английском языке.

Jan 01.05.2018 16:35

Более конкретное описание проблемы сделало этот вопрос более подходящим.

doctorlove 01.05.2018 17:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
89
1

Ответы 1

import re
import itertools

str = "acısı içine (or yüreğine) çökmek (or işlemek)"
#  spitting the string into "combinable" parts
pattern = re.compile('\w+ \(or \w+\)|\w+')
parts = pattern.findall(str)
#  parts = ['acısı', 'içine (or yüreğine)', 'çökmek (or işlemek)']

#  replacing each part with a list of possible options (one or two)
parts = [_.strip(')').split(' (or ') for _ in parts]
#  parts = [['acısı'], ['içine', 'yüreğine'], ['çökmek', 'işlemek']]

#  producing all possible combinations
result = [' '.join(p) for p in itertools.product(*parts)]
#  result = ['acısı içine çökmek', 'acısı içine işlemek', 'acısı yüreğine çökmek', 'acısı yüreğine işlemek']

Спасибо за решение, но я думаю, что регулярное выражение не работает, потому что список с именем parts возвращает как [[''], [''], [''], [''], [''], [''], [ '']]

Gülnur K. 01.05.2018 19:26

Работал для меня над образом докера, созданным из python: latest. Какую версию Python в какой системе вы используете? Может дело в кодировке? Можете ли вы попробовать со строкой чисто латинских букв (например, 'a b (or c) d (or e) f')?

nutic 01.05.2018 19:53

Я использую python3 на pycharm, и я тестировал код с разными строками. Regex также не работает на ссылка на сайт. Я не понял, чего не хватает.

Gülnur K. 01.05.2018 20:08

Ах! Утраченные скобки убегают при копировании. Исправил ответ выше.

nutic 01.05.2018 20:16

Да, теперь работает нормально. Большое спасибо за вашу помощь.

Gülnur K. 01.05.2018 21:17

Другие вопросы по теме