代码之家  ›  专栏  ›  技术社区  ›  levanovd

太贪婪的正则表达式问题[关闭]

  •  -3
  • levanovd  · 技术社区  · 14 年前

    我需要解析如下示例中所示的字符串:

    Regex TitleRegex = new Regex(@"[A-Z].* - ([0-9].*) [A-Z]");
    var match = TitleRegex.Match("Chapter - 1 The Brown Fox");
    Console.WriteLine(match.Groups[1].Value);
    

    我要的是提取一个数字。问题是输出是 1 The Brown 1 .
    我不明白为什么数字中也包括字母( [0-9]

    有什么建议吗?

    4 回复  |  直到 14 年前
        1
  •  3
  •   alex    14 年前
    Regex TitleRegex = new Regex(@"[A-Z].* - ([0-9]{1,2}) [A-Z]");
    

    你正在捕获 . 通常是 . 我把 {1,2} 量词在那里,意味着它将匹配0-99。根据您的要求更改它(或者您可以将其保留为 * ).

    \d 而不是 [0-9]

        2
  •  2
  •   annakata    14 年前

    这些信之所以包括在内,是因为你在添加 .* 抓捕小组。试试看 ([0-9]+) 或者更好 (\d+)

        3
  •  1
  •   Andrew Barber Eric Lafortune    14 年前

    [0-9].*
    

    部分模式匹配任何一个数字(0-9)一次,然后

    去掉星号前的点。

    [0-9]*
    
        4
  •  0
  •   Alex Rashkov    14 年前

    更改为:

    "[A-Z].* - ([0-9]?) [A-Z]"
    

    当你使用 [0-9].* 它使用 [0-9]+ [0-9]{1,3} 或者你想要多少就多少。