Как мне написать регулярное выражение .Net, чтобы оно совпадало с конца строки назад - PullRequest
0 голосов
/ 14 октября 2008

У меня есть следующая строка текста

Reference=*\G{7B35DDAC-FFE2-4435-8A15-CF5C70F23459}#1.0#0#..\..\..\bin\App Components\AcmeFormEngine.dll#ACME Form Engine

и хотите взять следующие две отдельные группы захвата:

AcmeFormEngine.dll
ACME Form Engine

Кто-нибудь может помочь?

Ответы [ 4 ]

5 голосов
/ 14 октября 2008

Если вы искренни в строковом формате, вы также можете решить это с помощью метода привязки к земле, без регулярных выражений: возьмите все после последнего индекса '\' и разделите его на '#'.

1 голос
/ 14 октября 2008

Я проголосовал за не-регулярный подход Томаласка. Однако, если вы должны были сделать это с помощью регулярных выражений, я думаю, вам нужно что-то вроде этого

\\([^\\/?"<>|]+?)\#([^\\/?"<>|]+?)[\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

Короче говоря, это загадочно ... по возможности избегайте.

1 голос
/ 14 октября 2008
Regex r = new Regex("\\(.+?)\#(.+?)$");

Нежадные кратности велики.

'$': сопоставить конец строки.

"\#(.+?)": сопоставить все обратно от конца строки до первого символа «#» и вернуть его при захвате.

"\\(.+?)": опять то же самое, за исключением экранированного символа \.

1 голос
/ 14 октября 2008
    using System.Text.RegularExpressions;

    Regex regex = new Regex(
    @"\\(?<filename>[\w\.]+)\#(?<comment>[\w ]+)$",
    RegexOptions.IgnoreCase
    | RegexOptions.Compiled
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...