Оглавление регулярных выражений

#regex

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

Вопрос:

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

Данные следующие:

 1.     Header 1
1.2.  SubHeader2
1.2.1     Subheader 
1.2.2.   Another header
1.2.2.1        Test
1.2.2.2.    Test2
 

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

Я пробовал

 ^([0-9.] )[.]s (. )$      -- Doesnt work when there is no trailing
^([0-9.] )[.]?s (. )$     -- Contains the trailing dot if it is there 
 

Ответ №1:

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

 ^(d (?:.d )*).?s (. )
 

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

  • ^ — начало строки
  • (d (?:.d )*) — Группа 1: одна или несколько цифр, а затем ноль или более повторений последовательности a . и одной или нескольких цифр
  • .? — необязательный .
  • s — один или несколько пробелов
  • (. ) — Группа 2: любой один или несколько символов, отличных от символов разрыва строки, как можно больше.