У меня есть куча таких строк:
abc#axyz(abc#axyz#a#aabc)abc#axyz
. Что мне нужно сделать, так это удалить все #a
, которые появляются в тексте между скобками, а те, что снаружи, должны остаться. Я пробовал следующее:
\((.*?)(#a)(.*?)\)
Но он ловит только первое повторение. Что я делаю не так? Спасибо за любой вклад!
🤔 А знаете ли вы, что...
Python является интерпретируемым языком программирования.
Попробуйте (ссылка regex101):
import re
s = "abc#axyz(abc#axyz#a#aabc)abc#axyz"
out = re.sub(r"#a(?=.*\))(?!.*\()", "", s)
print(out)
Распечатки:
abc#axyz(abcxyzabc)abc#axyz
Я мог бы просто найти часть в скобках, а затем выполнить замену как отдельный шаг.
import re
s = "abc#axyz(abc#axyz#a#aabc)abc#axyz"
out = re.sub(r'\(.*\)', lambda m: m[0].replace('#a', ''), s)
print(out)