现在有这样的一段文字:
1.XXXXX
XXXXX
XXXXX
XXXXX2.XXXXX
XXXXX
XXXXX
XXXXX3.XXXXX
XXXXX
XXXXX
XXXXX
x表示任意字符,我想用正则表达式提出1到2,2到3,3到4.。之间的文字,其中包块换行
哪位指点一下啊!
1.XXXXX
XXXXX
XXXXX
XXXXX2.XXXXX
XXXXX
XXXXX
XXXXX3.XXXXX
XXXXX
XXXXX
XXXXX
x表示任意字符,我想用正则表达式提出1到2,2到3,3到4.。之间的文字,其中包块换行
哪位指点一下啊!
string[] r = Regex.Split(s, @"(?m)(^\d+.");
表示多行模式,多行模式的意思是^表示行首,$表示行尾,.只匹配\n以外的任意字符
(^\d. )
分组捕获从行首开始匹配一个数字,然后匹配任意一个字符后匹配一个空格
Regex.Split
用以上内容分割文本
i:忽略大小写
s:单行模式,^匹配文本开始,$匹配文本的最末端,.可以匹配任何字符,包括\n
x:忽略表达式中的空白字符,支持#开始到换行符之前的文本为正则表达式注解,类似c/c++/c#的//单行注释效果
n:忽略非命名的分组,只有命名的分组可以捕获。()只表示内部为整体捕获,不表示分组。
楼上的DEMO当作. 来处理了
string[] result = Regex.Split(yourStr,@"(?<=^|\r\n)\d[\s\S]+?(?=(.?\n){2}|$)");
string[] r = Regex.Split(s, @"(?m)(^\d+.")
的^\d+.前面为什么加一个(啊
{
string yourStr = @"1.经复议的行政案件,复议机关决定维持原具体行政行为的,复议机关是行政诉讼的被告。
正确
错误2.根据《中华人民共和国宪法》规定,任命国务院总理之权属于国家主席
正确
错误3.《中华人民共和国行政许可法》自2004年7月1日起实施。
正确
错误
";
MatchCollection result = Regex.Matches(yourStr, @"(?m)^(\d+).(.+)(?s)(.+?)(?=.\n\s*(?:\n|$))");
foreach (Match m in result)
{
Console.WriteLine("题目编号:"+ m.Groups[1].Value);
Console.WriteLine("题目问题:" + m.Groups[2].Value);
Console.WriteLine("答案选择:" + m.Groups[3].Value);
}
}