Я пытаюсь проанализировать число, следующее «Обеденный:» в следующем тексте, под вторым уровнем. Поэтому «666» следует вернуть.Регулярное выражение для захвата текста с неизвестным числом повторных групп между
MAIN LEVEL
Entrance: 11
Dining: 33
SECOND LEVEL
Entrance: 4444
Living: 5555
Dining: 666
THIRD LEVEL
Dining: 999
Kitchen: 000
Family: 33332
Если я использую что-то вроде (?:\bDining:\s)(.*\b)
то захватывает первое вхождение под MAIN. Поэтому я пытаюсь указать SECOND LEVEL
в регулярном выражении, за которым следует повторяющийся шаблон: новые строки, несколько пробелов, а затем текст, до Dining:
. This demo иллюстрирует две проблемы, с которыми я сталкиваюсь. Регулярное выражение используется: (?:\bSECOND\sLEVEL(\n\s+.*)*Dining:)(.*\b)
- ошибка «Катастрофические возвратами» появляется до вы не удалите самую последнюю строку, содержащую
Laundry: 1
. Это вызвано слишком большим количеством матчей или чем-то еще? - После того, как вы удалите эту строку, regex фиксирует только последний матч под номером
OTHER LEVEL
.. Возвращает «2» в отличие от матчаSECOND LEVEL
.
Иногда Dining:
не существует под SECOND LEVEL
и поэтому ничего не нужно возвращать.
Что такое регулярное выражение, которое будет записывать только номер Dining:
, и если оно не существует, то ничего не возвращает? Прямо регулярное выражение предпочтительнее, без зацикливания на Java, если это возможно. Спасибо
Мне интересно требование для «без кода Java.» Вы используете фреймворк или это просто ваши личные предпочтения? – markspace
Хороший вопрос. Я просто стараюсь оставаться последовательным, так как много другого моего извлечения текста связано с регулярным выражением, поэтому я надеялся избежать использования циклов или чего-то еще для части процесса извлечения и чистого регулярного выражения для другого. Возможно, это глупо, хотя – Mathomatic