Я проголосовал за не-регулярный подход Томаласка.
Однако, если вы должны были сделать это с помощью регулярных выражений, я думаю, вам нужно что-то вроде этого
\\([^\\/?"<>|]+?)\#([^\\/?"<>|]+?)[\r\n]*$
Это разрешит такие вещи, как - и _, которые допустимы в именах файлов. Это 2 идентичные группы (каждая из которых исключает недопустимые символы для имен файлов win32), начинающиеся с косой черты, разделенные знаком # и в конце строки ($) , Предполагая, что вторая группа также является допустимым именем файла win32.
Я увидел несколько уродливых коробок в соответствующей второй группе, [\ r \ n] * держит их подальше.
e.g. F5C70F23459}#1.0#0#..\..\..\bin\App Components\Acme_Form-Engine.dll#ACME Form Engine
group#1 => Acme_Form-Engine.dll
group#2 => ACME Form Engine
Короче говоря, это загадочно ... по возможности избегайте.