【问题标题】:Regular expression MatchCollection returns 1 instead of expected 3正则表达式 MatchCollection 返回 1 而不是预期的 3
【发布时间】:2015-09-29 23:39:09
【问题描述】:

我在 C# 中有一个长字符串,其格式为 \\server\value 我一直在使用 "(?

我正在尝试使用 MatchCollection 使用模式 (?=\\)

提取所有服务器名称

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

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

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

【问题讨论】:

    标签: c# .net regex


    【解决方案1】:

    您可以尝试下一个模式:

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

    【讨论】:

      【解决方案2】:

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

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

      你想得到这些匹配:

      serverA 
      serverB 
      serverC
      

      你可以使用惰性量化

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

      【讨论】:

      • 有吗?在 。*?意味着它匹配前一个元素一次或多次,还是意味着匹配前一个元素零次或多次,但尽可能少?
      • @user3421997, ? 将前一个量词标记为惰性。实际量词会带来同样的意义。 * 的意思是“零和更多”,*? 的意思是“零和更多”。
      猜你喜欢
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 2020-09-21
      • 2015-12-06
      相关资源
      最近更新 更多