-1

如何在 C# 中构造正则表达式模式以读取以以下格式开头的文本:

"Sec. 1.01."
"Sec. 1.02."
"Sec. 47.01."
"Sec. 47.06."
"Sec. 71.022."
4

4 回答 4

3
Sec\.\s\d+\.\d+\.

上面的正则表达式可能会完成这项工作。

Sec完全匹配 Sec
\.匹配点
\s匹配空格
\d匹配数字(数字)
\d+匹配出现的一个或多个数字

如果您还想匹配逗号,"请在正则表达式的开头和结尾添加。

于 2013-03-06T12:19:24.363 回答
3

也许:

"Sec\.\s\d+\.\d+\."

是你正在寻找的。

于 2013-03-06T12:14:04.507 回答
1

让我们构建一个正则表达式!

首先,您要匹配文字文本(包括空格)。但是,我们需要避开点。

"Sec\. "

然后你想匹配一个或多个数字。\d匹配数字,+匹配前面的一个或多个:

"\d+"

然后另一个点,再次逃脱:

"\."

然后是一个或多个数字的另一个序列:

"\d+"

最后还有一个点,逃脱了:

"\."

把这些表格放在一起:

"Sec\. \d+\.\d+\."

如果Sec.和数字之间的空格并不总是一个空格(例如,可能是空格序列或制表符),那么您可以使用\s空格类和+来多次匹配它("\s+"):

"Sec\.\s+\d+\.\d+\."

如果您的正则表达式还必须匹配一行的开头和结尾,那么^将匹配开头和$结尾:

"^Sec\.\s+\d+\.\d+\.$"

最后,如果你在 C# 中使用它,你必须在字符串前面加上 an 前缀,@以防止 C# 错误地解释斜杠:

string pattern = @"^Sec\.\s+\d+\.\d+\.$";

如果要捕获表达式的一部分,可以使用捕获组(写为(?<name> regex )。例如,捕获数字部分:

string pattern = @"^Sec\.\s+(?<num>\d+\.\d+)\.$";

现在您可以获得字符串的数字部分:

Regex regex = new Regex(pattern);
var match = regex.Match("Sec. 71.022.");
string num = match.Groups["num"].Value;
// num = "71.022"

您可以在正则表达式参考中找到所有这些以及更多内容:

于 2013-03-06T12:20:21.053 回答
0
MatchCollection mc = Regex.Matches(a, @"^Sec[.]\s(?:\d*[.]){2}$");
foreach (Match item in mc)
{
    Console.WriteLine(item.Value);
}
于 2013-03-06T12:17:01.300 回答