Как я могу заменить слова, в скобках которых написано «или что-то в этом роде»?
Пример:
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
. Хотя есть люди, желающие помочь, вы должны хотя бы сами проявить некоторые усилия. Какой код вы использовали, где застряли? Imo, это включает в себя двухэтапный подход: получение рассматриваемых слов, например, import re; rx = re.compile(r'\(or\s+([^()]+)\)\s*'); words = [m.group(1) for m in rx.finditer(string)]
и свод правил, что делать потом. Наконец (большинство людей здесь не говорят по-турецки), более вероятно, что они получат ответ на английском языке.
Более конкретное описание проблемы сделало этот вопрос более подходящим.
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 возвращает как [[''], [''], [''], [''], [''], [''], [ '']]
Работал для меня над образом докера, созданным из python: latest. Какую версию Python в какой системе вы используете? Может дело в кодировке? Можете ли вы попробовать со строкой чисто латинских букв (например, 'a b (or c) d (or e) f')?
Я использую python3 на pycharm, и я тестировал код с разными строками. Regex также не работает на ссылка на сайт. Я не понял, чего не хватает.
Ах! Утраченные скобки убегают при копировании. Исправил ответ выше.
Да, теперь работает нормально. Большое спасибо за вашу помощь.
здесь вы можете получить помощь по регулярным выражениям: stackoverflow.com/questions/4736/…