-3

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

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

4 回答 4

3
Regex TitleRegex = new Regex(@"[A-Z].* - ([0-9]{1,2}) [A-Z]");

您正在捕获.通常匹配除新行之外的所有内容。我把{1,2}量词放在那里,这意味着它将匹配 0-99。更改它以满足您的要求(或者您可以将其保留为0 或更多 *)。

你也可以使用\d代替[0-9]. 速记通常是一件好事:)

于 2010-11-11T13:02:53.527 回答
2

包含这些字母是因为您在添加.*到捕获组时要求它们。尝试只是([0-9]+)或更好(\d+)

于 2010-11-11T13:05:08.113 回答
1

答案是您似乎在滥用量词;

[0-9].*

该部分模式匹配任何单个数字 (0-9) 一次,然后匹配任何字符 (.) 0 次或更多次 (*)

去掉星号前的点。

[0-9]*
于 2010-11-11T13:04:22.973 回答
0

改成:

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

当您使用[0-9].*它搜索一个数字加上 0 或多个符号时,使用[0-9]+会在该特定位置为您提供一个或多个整数。如果您确定不会超过 3 个整数,那么您可以使用[0-9]{1,3}或尽可能多地使用 4,5 等。

于 2010-11-11T13:05:29.250 回答