Как определить списки, которые начинаются после двойной новой строки или в начале документа с помощью Regex?

Скажем, у меня есть следующий блок текста:

- one

some text
- should not start a list

- should start
- should continue

5. should also
6. more

Я хочу найти три разных списка здесь: первая строка, 6-я и 7-я строки, а также 9-я и 10-я строки.

Таким образом, список действителен, если он начинается с двух новых строк (он не может начинаться только с одной строки после абзаца) или запускает документ.

Я старался: ^(?<=\n{2})(?:(?:(?:\-)|(?:\d\.))( {1,})[^\n]*\n?)*$ который использует оглядку назад, чтобы проверить, есть ли две новые строки раньше, и это работает, но также заставляет его теперь ловить - one список.

Как мне сказать «два символа новой строки перед или начать документ» в Regex?

РЕДАКТИРОВАТЬ: Чтобы уточнить это должно быть в многострочном режиме. И язык это PHP.

1

Решение

Вы можете использовать это регулярное выражение:

(?<=\n{2}|^)(?:(?:-|\d+\.) +.*\n?)+

RegEx Demo

Позитивный взгляд за спиной (?<=\n{2}|^) означает, что есть 2 предыдущих символа новой строки или начала строки.

Я также немного реорганизовал ваше регулярное выражение для удаления избыточных групп захвата.

3

Другие решения

Вы не указали свой язык программирования, в PCRE однако (PHP и т. д.) вы можете придумать следующее регулярное выражение:

(?:^|(?:\R{2}))[-\d]
# match the start (^)
# or two newlines
# followed by a dash or a digit

Увидеть демо на regex101.com.
Если \R не поддерживается, попробуйте заменить его [\n\r]так, что это становится:

(?:^|(?:[\n\r]{2}))[-\d]
1

Вы можете использовать регулярное выражение:

^(?:-|[0-9]).*|(?<=\n\n)(?:-|[0-9])(?:.|\n)*?(?=\n+[^-0-9]|$)

https://regex101.com/r/bW1zH1/3

Я предполагаю, что «список» начинается с дефиса или числа.

0
По вопросам рекламы [email protected]