现在有这样的一段文字:
1.XXXXX
XXXXX
XXXXX
XXXXX2.XXXXX
XXXXX
XXXXX
XXXXX3.XXXXX
XXXXX
XXXXX
XXXXX
x表示任意字符,我想用正则表达式提出1到2,2到3,3到4.。之间的文字,其中包块换行
哪位指点一下啊!

解决方案 »

  1.   

    string s = "...";
    string[] r = Regex.Split(s, @"(?m)(^\d+.");
      

  2.   

    能解释一下(?m)(^\d+.这句话的意思吗,就是帮我分析一下,特别是前面的(?m)
      

  3.   

    (?m)
    表示多行模式,多行模式的意思是^表示行首,$表示行尾,.只匹配\n以外的任意字符
    (^\d. )
    分组捕获从行首开始匹配一个数字,然后匹配任意一个字符后匹配一个空格
    Regex.Split
    用以上内容分割文本
      

  4.   

    模式修饰除了m的多行模式,还有
    i:忽略大小写
    s:单行模式,^匹配文本开始,$匹配文本的最末端,.可以匹配任何字符,包括\n
    x:忽略表达式中的空白字符,支持#开始到换行符之前的文本为正则表达式注解,类似c/c++/c#的//单行注释效果
    n:忽略非命名的分组,只有命名的分组可以捕获。()只表示内部为整体捕获,不表示分组。
      

  5.   

    你的.是全角的
    楼上的DEMO当作. 来处理了
      

  6.   

    try
    string[] result = Regex.Split(yourStr,@"(?<=^|\r\n)\d[\s\S]+?(?=(.?\n){2}|$)");
      

  7.   

    没有我在程序里面已经把全角的 .换成.了啊,Split之后还是1维的,还有就是
    string[] r = Regex.Split(s, @"(?m)(^\d+.")
    的^\d+.前面为什么加一个(啊
      

  8.   

            public static void Test()
            {
                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);
                }
            }