Случай с подлым обратным слешем - Regex - PullRequest
1 голос
/ 18 мая 2010

Я упускаю что-то очень очевидное здесь, но я просто не вижу этого.

У меня есть:

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

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

\abc.txt

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

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

и получите:

999\

Странно. Результат хорош в регуляторе Ошерова. Есть мысли?

Спасибо.

Ответы [ 5 ]

10 голосов
/ 18 мая 2010

Match - это полное совпадение; Вы хотите первую группу;

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

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

1 голос
/ 18 мая 2010

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

string output = Regex.Match(input, pattern).Groups[1].Value;
0 голосов
/ 18 мая 2010

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

Совпадение всего после первой косой черты /

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

Совпадение со всеми после последней косой черты /

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

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

^(.*)(?=\\)

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

0 голосов
/ 18 мая 2010

В качестве альтернативы ответу Марка, вы можете использовать положительное утверждение с нулевой шириной за спиной в вашем шаблоне:

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

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

0 голосов
/ 18 мая 2010

Вам нужно посмотреть на результаты в Groups, а не на весь сопоставленный текст.

http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match.groups(v=VS.71).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...