我在这里遗漏了一些非常明显的东西,但我无法看到它。
我有:
string input = @"999\abc.txt";
string pattern = @"\\(.*)";
string output = Regex.Match(input,pattern).ToString();
Console.WriteLine(output);
我的结果是:
\abc.txt
我不想斜线,也无法弄清楚为什么它会潜入输出。我尝试翻转模式,斜线再次在输出中结束:
string pattern = @"^(.*)\\";
并获得:
999\
奇怪。结果在Osherove的Regulator中很好。有什么想法吗?
感谢。
答案 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来测试正则表达式,终身保护。