正则表达式MatchCollection返回1而不是预期的3

时间:2014-05-29 19:10:35

标签: c# .net regex

我在C#中有一个长字符串,其格式为\\ server \ value 我一直在使用“(?< ='\\\\)。*(?= \\)”的正则表达式模式从字符串中提取服务器。但是有一个用例,其中多个'\ server \ value'字符串可以链接在一起,如'\\ serverA \ value1'+'\\ serverB \ value2'+'\\ serverC \ value3'

我正在尝试使用MatchCollection使用模式提取所有服务器名称(?< =。\\\\)。*(> = \\)

第一个分组构造中用于说明'字符的句点。我希望结果返回3次出现,但它只返回1.我的模式出了什么问题?

   string expression = "'\\\\serverA\\value1' + '\\\\serverB\\value2' + '\\\\serverC\\value3'";
   string pattern = @"(?<=\\\\).*(?=\\)";

   MatchCollection matches;
   matches = Regex.Matches(expression, pattern);

2 个答案:

答案 0 :(得分:1)

您可以尝试下一个模式:

@"\\\\(.*?)\\"

答案 1 :(得分:0)

如果我有,我会得到这样的结果

serverA\value1' + '\\serverB\value2' + '\\serverC

你想得到这些比赛:

serverA 
serverB 
serverC

您可以使用延迟量化

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