我需要解析下面示例中的字符串:
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]
)模式中。
有什么建议吗?
答案 0 :(得分:3)
Regex TitleRegex = new Regex(@"[A-Z].* - ([0-9]{1,2}) [A-Z]");
您正在捕获.
,其中匹配除新行之外的所有内容。我把{1,2}
量词放在那里,这意味着它将匹配0-99。根据您的要求进行更改(或者您可以将其保留为 0或更多 *
)。
您是否也可以使用\d
代替[0-9]
。速记通常是一件好事:)
答案 1 :(得分:2)
包含这些字母是因为您在将.*
添加到捕获组时要求提供这些字母。试试([0-9]+)
或更好(\d+)
答案 2 :(得分:1)
答案是你似乎在滥用量词;
[0-9].*
该部分模式匹配任何单个数字(0-9)一次,然后也任何字符(。)0次或更多次(*)
删除星号前的点。
[0-9]*
答案 3 :(得分:0)
更改为:
"[A-Z].* - ([0-9]?) [A-Z]"
当您使用[0-9].*
时,它会搜索一个数字加上0或多个符号,使用[0-9]+
会在该特定位置为您提供一个或多个整数。如果您确定不会超过3个整数,那么您可以使用[0-9]{1,3}
或尽可能多地使用4,5等等。