Я хочу удалить определенные слова или символы из предложения с некоторыми исключениями, используя регулярное выражение.
Для example- у меня есть строка, this is [/.] a string [ra] with [/] something
, я хочу удалить [ra]
, [/.]
Но не [/]
.
Я использовал:
m = re.sub('\[.*?\]','',n)
который отлично работает, как я могу сохранить this-> [/]
Вы можете использовать
re.sub(r'\[(?!/])[^][]*]', '', n)
См. Демо-версию regex.
подробности
\[
- a [
char(?!/])
- отрицательный результат, который не соответствует совпадению, если есть /]
сразу справа от текущего местоположения[^][]*
- 0+, кроме [
и ]
]
- a ]
char.Вы можете использовать чередование для захвата в группе того, что вы хотите сохранить, и сопоставить то, что хотите удалить.
result = re.sub(r"(\[/])|\[[^]]+\]", r"\1", n)
объяснение
(\[/])|\[[^]]+\]
(\[/])
Захват [/]
в группе|
Или же\[[^]]+\]
Сопоставьте открытую квадратную скобку до закрывающей квадратной скобки с использованием символа отрицательного символа Замените первую группу захвата \1
Используйте этот шаблон \[(?!\/\])[^\]]+\]
И замените все совпадения пустой строкой.
Объяснение: оно соответствует [
с \[
, а затем заверяет, что следующее НЕ - это \]
, поэтому мы не сопоставляем [\]
, это делается с отрицательным lookahead: (?!\/\])
, Тогда оно соответствует всем до ]
и ]
с шаблоном [^\]]+\]
([^\]]+
соответствует одному или нескольким другим символам, а затем ]
).
new_string=old_string.replace('[ra'],'').replace('[/.]','')
- это ответ на вопрос, который вы задали. Если это не то, что вы хотите, я предлагаю задать вопрос более точно, чем просто список вещей, которые вы делаете и не хотите удалять.