Рассмотрит многострочную строку, состоящую из N lines
, как следующее:Regex для разбиения многострочного строки
Line 1 text
Line 2 text
Line 3 text
...
Line n-1 text
Line n text
anchor=value
Line n+2 text
Line n+3 text
Line n+4 text
...
Line N text
anchor
ключа не появляется в любом из линий и может быть пробелами до якоря, а также вокруг знака =
, который следует за ним.
мне нужно регулярное выражение, которое разбивает выше строку на 3 группы:
- линии 1 на линию п (включительно)
- анкерной линии (точка раздела)
- линии N + 2 на линию N (включительно)
ближайший я получил в растворе
(?s)^(?:(?!anchor\s*=\s*).)+?\r|\nanchor\s*=\s*([^\r\n]+)(?:\r|\n)(.*)
, но указанное выше регулярное выражение включает весь текст в первой группе соответствия и заполняет оставшиеся 2 группы, как ожидалось.
Дополнительным требованием является то, что регулярное выражение должно быть как можно быстрее, поскольку оно будет применяться к большим объемам данных. Также обратите внимание, что обработка с помощью одного регулярного выражения является единственным вариантом в этом случае использования.
Любые идеи?
Первый работает, если нежирный оператор в последней группе становится жадным. Секунды работают так, как есть. Благодаря! – PNS
@PNS, пожалуйста. Я знал, что для шаблона '(. *?)' Может понадобиться какая-то граница, поэтому я добавил второй вариант. –
Да, похоже, все в порядке. Благодарю. – PNS