У меня есть регулярное выражение, которое не находит совпадения с текстом в моем файле
Рег. пример:
^[ \t]*#[ \t]+vtk[ \t]+DataFile[ \t]+Version[ \t]+([^\s]+)[ \t]*\n(.*)\n[ \t]*(ASCII|BINARY)[ \t]*\n[ \t]*DATASET[ \t]+([^ ]+)[ \t]*\n
Текст файла:
# vtk DataFile Version 4.2
ASCII
DATASET
Когда я сокращаю выражение до следующего, оно работает:
^[ \t]*#[ \t]+vtk[ \t]+DataFile[ \t]+Version[ \t]+([^\s]+)[ \t]*\n(.*)\n[ \t]*
Почему текст не совпадает?





Я думаю, что вы сопоставляете (.*)\n слишком много, и после DATASET больше нет данных для сопоставления, но в вашем шаблоне все еще есть [ \t]+([^ ]+)[ \t]*\n, которые не являются обязательными.
Попробуйте это так:
^[ \t]*#[ \t]+vtk[ \t]+DataFile[ \t]+Version[ \t]+([^\s]+)[ \t]*\n[ \t]*(ASCII|BINARY)[ \t]*\n[ \t]*DATASET
По частям ваш шаблон будет выглядеть так:
^[ \t]*#[ \t]+vtk[ \t]+DataFile[ \t]+Version[ \t]+([^\s]+) Эта группа будет соответствовать 4.2[ \t]*\n[ \t]*(ASCII|BINARY)[ \t]*\n[ \t]*DATASETДемонстрация регулярных выражений
@ afriedman111 Вы имеете в виду, какая строка будет соответствовать вашему исходному шаблону? Например, это будет соответствовать исходному шаблону regex101.com/r/Vomfgi/1.
Поэтому у меня нет доступа к коду для изменения Reg Ex, мне нужно изменить текст файла. Как будет выглядеть строка, которая вызовет совпадение?