Скажем, у меня есть следующий блок текста:
- 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.
Вы можете использовать это регулярное выражение:
(?<=\n{2}|^)(?:(?:-|\d+\.) +.*\n?)+
Позитивный взгляд за спиной (?<=\n{2}|^)
означает, что есть 2 предыдущих символа новой строки или начала строки.
Я также немного реорганизовал ваше регулярное выражение для удаления избыточных групп захвата.
Вы не указали свой язык программирования, в 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]
Вы можете использовать регулярное выражение:
^(?:-|[0-9]).*|(?<=\n\n)(?:-|[0-9])(?:.|\n)*?(?=\n+[^-0-9]|$)
https://regex101.com/r/bW1zH1/3
Я предполагаю, что «список» начинается с дефиса или числа.