Вы можете использовать это регулярное выражение с предвидением:
^(\d+)\s(\w+)\s(.*?)(?=\n\d|\z)
с модификаторами DOTALL и MULTILINE.
Обновленное демо-выражение Regex
Подробности RegEx:
^
: начало строки (\d+)
: сопоставление и захват 1+ цифр в группе # 1 \s
: сопоставить пробел (\w+)
: сопоставить и перехватить символы 1+ слова в группе # 2 \s
: сопоставить пробел (.*?)
: сопоставить0 или более любых символов (не жадных), если при следующем заявлении в виде предварительного просмотра используется satiSfied (?=\n\d|\z)
: утверждение в виде предварительного просмотра, подтверждающее, что у нас есть новая строка, за которой следует цифра или конец ввода
Более быстрое регулярное выражение:
Если вы используете это регулярное выражение для длинной строки, то вам также следует помнить общую производительность какрегулярное выражение с модификатором DOTALL
будет иметь тенденцию замедляться для текста большого размера.Для этого я предлагаю использовать это регулярное выражение, которое не нуждается в модификаторе DOTALL:
^(\d+)\s(\w+)\s(.*(?:\n.*)*?)(?=\n\d|\z)
RegEx Demo 2
На демонстрационном примере regex101 это регулярное выражение занимает всего 181
шагов по сравнению с первым шагом 1300
шагов .