В вашем исходном регулярном выражении:
(?<=\\)[^\\\n\r]+?(?=\\[^\\]*\.)(?!.*\.doc)
особо нечего улучшать с точки зрения использования обходных путей.
Необходимо сказать, что положительный взгляд позадирегулярное выражение, когда разрешено начинать совпадение.
Позитивный взгляд вперед необходим для прекращения расширения квантификатора +?
.
А отрицательный взгляд вперед необходим для отмены недопустимых совпадений.
Возможно, вы сможете объединить оба взгляда в один.Но хранить их отдельно более эффективно, так как если оценка одного не удалась, она может пропустить оценку второго.
Однако , если вы ищете более эффективный /«обычный» Regex, я бы обычно использовал что-то вроде:
^.*\\(.+?)\\[^\\]+\.(?!doc).+$
вместо использования обходных путей, чтобы исключить все, кроме моего желаемого вывода из совпадения, я бы включил желаемый вывод в группу захвата.
это позволяет мне указывать регулярному выражению проверять совпадение только один раз на строку, а не после когда-либо \
символа.
Затем, чтобы получить желаемый результат, все, что мне нужно сделать, это захватитьсодержимое группы захвата 1 из каждого совпадения.
рабочий пример
orignal (98 150 шагов)
Группы захвата (66 586 шагов)
Надеюсь, это вам поможет