如何构造正则表达式模式以读取以C#中的以下格式开头的文本:
"Sec. 1.01."
"Sec. 1.02."
"Sec. 47.01."
"Sec. 47.06."
"Sec. 71.022."
答案 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);
}