Я пытаюсь создать регулярное выражение для соответствия содержимому между пронумерованными списками, например. следующего содержания:Соответствие регулярных выражений для текста
1) Текст для части 1 2) Текст части 2 3) Текст части 3
Я пытаюсь создать регулярное выражение для соответствия содержимому между пронумерованными списками, например. следующего содержания:Соответствие регулярных выражений для текста
1) Текст для части 1 2) Текст части 2 3) Текст части 3
Следующая PCRE должно работать, если вы не получили каких-либо вещь, отформатированный как " 1)»или тому подобное внутри секций:
\d+\)\s*(.*?)\s*(?=\d+\)|$)
Объяснение:
\d+\)
дает ряд а затем )
.\s*
соответствует предыдущим пробелам.(.*?)
захватывает содержимое без жадности.\s*
соответствует конечным пробелам.(?=\d+\)|$)
гарантирует, что за совпадением следует либо начало нового раздела, либо конец текста.Обратите внимание, что не навязывает, что они должны быть в восходящем или что-нибудь подобное, так что бы соответствовать следующий текст, а также:
4) Hello there 1) How are you? 5) Good.
Я хотел бы предложить следующее (PCRE) :
(?:\d+\)\s*(.*?))*$
внутренняя часть \d+\)\s*
совпадает с номером списка и закрывающей скобки, а затем дополнительным пробелом (ами).
(.*?)
соответствует тексту списка, но не жадным способом (в противном случае он также соответствует следующему элементу списка).
Входящий (?: )*$
соответствует указанному выше нолю или более раз, до конца ввода.
Вы должны иметь в виду текст после числа и кронштейн может быть любой текст, это будет найти свой подстроки:
\d\).+?(?=\d\)|$)
EDIT:
Чтобы избавиться от пробелов и возвращать только текст без номера, получите группу 1 из следующего матча:
\d\)\w*(.+?)(?=\d\)|$)
Чтобы получить номер в группе (1) и te xt в группе (2) используют это:
(\d)\)\w*(.+?)(?=\d\)|$)
По моему опыту, большинство двигателей регулярных выражений не позволяют перехватить группы захвата, к сожалению. –
Ну, тогда используйте '\ d + \) \ s * ((?:. (?! \ D \))) *)' и повторяйте, пока все не совпадёт. –