如何在 C# 中构造正则表达式模式以读取以以下格式开头的文本:
"Sec. 1.01."
"Sec. 1.02."
"Sec. 47.01."
"Sec. 47.06."
"Sec. 71.022."
Sec\.\s\d+\.\d+\.
上面的正则表达式可能会完成这项工作。
Sec
完全匹配 Sec
\.
匹配点
\s
匹配空格
\d
匹配数字(数字)
\d+
匹配出现的一个或多个数字
如果您还想匹配逗号,"
请在正则表达式的开头和结尾添加。
也许:
"Sec\.\s\d+\.\d+\."
是你正在寻找的。
让我们构建一个正则表达式!
首先,您要匹配文字文本(包括空格)。但是,我们需要避开点。
"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"
您可以在正则表达式参考中找到所有这些以及更多内容:
MatchCollection mc = Regex.Matches(a, @"^Sec[.]\s(?:\d*[.]){2}$");
foreach (Match item in mc)
{
Console.WriteLine(item.Value);
}