Представьте, что у нас есть длинная строка, содержащая подстроки 'cat' и 'dog', а также другие случайные символы, например.
cat x dog cat x cat x dog x dog x cat x dog x cat
Здесь «x» представляет любую случайную последовательность символов (но не «cat» или «dog»).
Что я хочу сделать, так это найти каждого «кота», за которым следуют любые символы, кроме «собаки», а затем «кота». Я хочу удалить этот первый экземпляр 'cat' в каждом случае.
В этом случае я бы хотел убрать скобку [cat], потому что после нее нет «dog» перед следующим «cat»:
cat x dog [cat] x cat x dog x dog x cat x dog x cat
В итоге:
cat x dog x cat x dog x dog x cat x dog x cat
Как это можно сделать?
Я подумал о том, чтобы как-то использовать регулярное выражение типа (n) (? = (N)), как рекомендовал VonC
здесь
(cat)(?=(.*cat))
, чтобы соответствовать всем парам 'cat' в строке. Но я все еще не уверен, как я мог бы использовать это для удаления каждой кошки, за которой не следует «собака» перед «кошкой».
Реальная проблема, с которой я сталкиваюсь, заключается в Java. Но я на самом деле просто ищу общее решение для псевдокода / регулярных выражений.