Извлеките весь текст после двух не обязательно последовательных слов

#regex

#регулярное выражение

Вопрос:

У меня есть строка, подобная

 deleted - the status was being deleted and got it back with it.
 

для которого я хочу использовать регулярное выражение. Здесь фиксированными элементами являются слова status и deleted . Между ними может быть другой текст, и мне нужно это игнорировать.

Теперь мое регулярное выражение (?<=status).*

Это занимает все после ‘status’, но мне нужно игнорировать все от ‘status’ до ‘deleted’ и взять остальное.

Например, ввод:

 deleted - the status was being deleted and got it back with it.
 

Желаемый результат:

 and got it back with it.
 

Комментарии:

1. Добро пожаловать в SO. Пожалуйста, уточните, что вы делаете и в чем заключается ваш вопрос. В вашем сообщении неясно, чего вы пытаетесь достичь.

2. Совершенно ясно, что вам нужно status.*?deleteds (.*) или один из его вариантов. (?<=status.*?deleteds ).* может сработать для вас.

Ответ №1:

Вы можете использовать

 status.*?deleteds (.*)
 

Посмотрите эту демонстрацию регулярных выражений. Вам нужно получить доступ к значению группы 1, чтобы получить необходимый результат.

Или, если в вашей среде поддерживается шаблон поиска бесконечной ширины, используйте

 (?<=status.*?deleteds ).*
 

Посмотрите эту демонстрацию регулярных выражений.

ПРИМЕЧАНИЕ: Если пробелы после deleted необязательны, используйте s* вместо s .

Подробные сведения

  • (?<= — начало положительного поиска, который соответствует местоположению в строке, которому непосредственно предшествует его шаблон:
  • status.*?deleted status , затем любые нулевые или более символов, отличных от символов разрыва строки, как можно меньше, а затем deleted
  • s — один или несколько символов пробела
  • ) — конец просмотра
  • .* — ноль или более символов, отличных от символов разрыва строки, как можно больше

Ответ №2:

Я думаю, вы ищете что-то вроде этого:

 /(?P<status>[a-z] ) -. (?P=status) (.*)/
 

См.:
https://regex101.com/r/pKnaAc/1

Ответ №3:

Вы можете использовать позитивный взгляд назад, как вы делаете сейчас, но вам нужно добавить все ваши требования (дополнительный текст и разделитель deleted ).:

 (?<=status.*deleted).*
 

Должно дать вам то, что вы хотите.