在C#中需要正则表达式模式

时间:2013-03-06 12:12:47

标签: c# regex

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

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

4 个答案:

答案 0 :(得分:3)

也许:

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

您在寻找什么。

答案 1 :(得分:3)

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

上述正则表达式可能会起作用。

Sec符合准确的章 \.匹配点
\s匹配空格
\d匹配数字(数字)
\d+匹配一次或多次出现的数字

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

答案 2 :(得分:1)

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

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

"Sec\. "

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

"\d+"

然后另一个点再次逃脱:

"\."

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

"\d+"

最后另一个点逃脱了:

"\."

将这些表格放在一起:

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

如果Sec.和数字之间的空格不总是单个空格(例如可能是一系列空格或制表符),那么您可以使用\s空格类和{{ 1}}不止一次匹配(+):

"\s+"

如果您的正则表达式也必须与行的开头和结尾匹配,那么"Sec\.\s+\d+\.\d+\." 将匹配开头,^将匹配结尾:

$

最后,如果你在C#中使用它,你必须在字符串前加"^Sec\.\s+\d+\.\d+\.$" ,以防止C#错误地解释斜杠:

@

如果要捕获部分表达式,可以使用捕获组(写为string pattern = @"^Sec\.\s+\d+\.\d+\.$"; 。例如,捕获数字部分:

(?<name> regex )

现在你可以得到字符串的数字部分:

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

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

答案 3 :(得分:0)

MatchCollection mc = Regex.Matches(a, @"^Sec[.]\s(?:\d*[.]){2}$");
foreach (Match item in mc)
{
    Console.WriteLine(item.Value);
}