Я пытаюсь использовать Regex для поиска между началом отчета и началом следующего отчета далее по тому же файлу, захватить отчет целиком, а затем использовать его для поиска дубликатов и их удаления.

Они разбиты по спискам CRLF, и я подумал, что я умен, выполнив (\r\n).*(\r\n) чтобы захватить отчет, найти, удалить, повторить для следующего отчета.

Когда я делаю (\r\n).*(\r\n) он захватывает от следующего CRLF до последнего CRLF в файле.

Я не могу понять, как ограничить поиск только одним экземпляром первой строки отчета, ~ 30 строками тела, а затем концом отчета.

1 ответ1

1

Ваша проблема в том, что точка соответствует новой строке. Попробуйте снять флажок «точка соответствует новой строке». Который в notepad++ может быть не трудно найти (см. Нижний левый угол диалогового окна edit..find notepad++). Я не буду включать изображение, потому что вы не поместили notepad++ в заголовок, и я думаю, что было бы хорошо, если бы ответ не был испорченным, чтобы он выглядел слишком ориентированным на notepad++ и ненужно ориентированным на notepad++. Другие программы, которые поддерживают регулярные выражения, также имеют точку соответствия новой строки, которая может быть отмечена или не отмечена.

Вы можете поэкспериментировать с другими поиска и посмотреть , если они работают или нет .. некоторые будут работать независимо от точки, например , если они не используют точку, или если они могут иметь использовать точку , но с , .*? который использует оператор *? так что это не слишком много. Другие примеры регулярных выражений требуют, чтобы точка, соответствующая новой строке, не отмечалась. Так что можете также снять галочку и поставить галочку, чтобы увидеть, что, если какой-либо контраст. Вы можете попробовать это ^.*$ С точкой, совпадающей с новой строкой без галочки. Или твой с ним не отмечен. Или посмотрите, что происходит с этим своего рода шаблоном в форме [^ X] * X (это хороший способ избежать проблемы, например, если вы это сделаете. * X, тогда * будет включать в себя x, а вы не хочу этого. Таким образом, вы можете указать все, что не является x, *, за которым следует x), например, \r\n[^\r\n]*\r\n или [^\r\n]*\r\n try ^[^\r\n]*\r\n Обратите внимание, что знак в квадратных скобках означает Not. Внешние квадратные скобки ^ означают положение совпадения в начале строки. Другой способ пытается *? конкретно .*? например, \r\n.*?\r\n .*? будет соответствовать нескольким точкам, насколько это возможно. .*?X будет соответствовать нескольким символам до X.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .