2010-05-17 5 views
1

Мне не хватает чего-то очень очевидного здесь, но я просто не могу его увидеть.Случай скрытой обратной косой черты - Regex

У меня есть:

string input = @"999\abc.txt"; 
string pattern = @"\\(.*)"; 
string output = Regex.Match(input,pattern).ToString(); 
Console.WriteLine(output); 

Мой результат:

\abc.txt 

Я не хочу слэш и не могу понять, почему он пробирается в выходной. Я попытался листать шаблон, а слэш ветры на выходе снова:

string pattern = @"^(.*)\\"; 

и получите:

999\ 

Странно. Результат - в регуляторе Ошерове. Есть предположения?

Спасибо.

ответ

10

Match является вся совпадение; вам нужна первая группа;

string output = Regex.Match(input,pattern).Groups[1].Value; 

(из памяти, может незначительно отличаться)

+2

Ах! Побей меня. –

+0

Yup, что сделал. Благодарю. –

+1

Просто пояснить, почему кто-то задается вопросом, почему это индекс 1 вместо индекса 0 в группы, потому что индекс 0 возвращает группу, которая представляет все совпадение. – jjxtra

1

Использование Groups получить только группу, а не весь матч:

string output = Regex.Match(input, pattern).Groups[1].Value; 
0

В качестве альтернативы ответ Марка, вы можете использовать zero-width positive lookbehind assertion в вашей схеме:

string pattern = @"(?<=\\)(.*)"; 

Это будет соответствовать "\", но исключить его из захвата

0

Вы можете попробовать префикс матча/постфикс, но исключить опции.

Матч все после первой косой черты/

(?<=\\)(.*)$ 

матча все после последнего слеша/

(?<=\\)([^\\]*)$ 

Match все до последнего слеша/

^(.*)(?=\\) 

BTW, скачать Expresso для тестирования регулярных выражений, общей спасательной жизни.

Смежные вопросы