偷偷摸摸的反斜杠的情况 - 正则表达式

时间:2010-05-17 22:28:39

标签: c# regex

我在这里遗漏了一些非常明显的东西,但我无法看到它。

我有:

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

我的结果是:

\abc.txt

我不想斜线,也无法弄清楚为什么它会潜入输出。我尝试翻转模式,斜线再次在输出中结束:

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

并获得:

999\

奇怪。结果在Osherove的Regulator中很好。有什么想法吗?

感谢。

5 个答案:

答案 0 :(得分:10)

Match整个匹配;你想要第一组;

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

(从记忆中;可能略有不同)

答案 1 :(得分:1)

使用Groups仅获取群组,而不是整个匹配:

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

答案 2 :(得分:0)

您需要查看Groups中的结果,而不是整个匹配的文字。

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

答案 3 :(得分:0)

作为Marc答案的替代方案,您可以在模式中使用zero-width positive lookbehind assertion

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

这将匹配“\”但将其从捕获

中排除

答案 4 :(得分:0)

您可以尝试匹配前缀/后缀但排除选项。

在第一个斜杠/

之后匹配所有内容
(?<=\\)(.*)$

在最后一次斜杠/

之后匹配所有内容
(?<=\\)([^\\]*)$

匹配最后一个斜杠/

之前的所有内容
^(.*)(?=\\)

顺便说一下,下载Expresso来测试正则表达式,终身保护。