小弟我做了一个网页内容采集器,通过正则表达式提取页面中的内容.但是遇到有换行的时候,有时候不能正常匹配,具体的哪种情况下不能正常匹配我也不清楚,好像是换行符是\r\n时可以正常匹配,换行符是\n时则不能正确匹配,但是我用 regex match tracer时不论用什么换行符都可以正常匹配.
请教各位该怎么处理换行符这个问题?造成这种现象的原因是神马呢?

解决方案 »

  1.   

    在unix下,ascii字符OD代表换行,而在windows中OA0D代表换行,换行可能更全面的称呼为回车换行,包含两个动作,回车和换行。回车代表回到本行的首部。你既然使用\r\n就可以了,就按两种方式处理。
      

  2.   

    加上singleLine属性,或是在表达式最前面写(?s)
      

  3.   

    主要出现在多行选项时,匹配$时出现问题
    可用\r?$,比如:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.IO;
    namespace sxLdfang
    {
        class Program
        {
            static void Main(string[] args)
            {
                string html = @"25
    36.5
    025
    -123.7
    36.35
    3.14.36";
                string pattern = @"(?m)^[+-]?(0|(?!0)\d+)(\.\d+)?\r?$";
                MatchCollection mc = Regex.Matches(html, pattern);
                foreach (Match m in mc)
                {
                    Console.WriteLine(m.Value);
                }
                Console.ReadKey();
            }
        }
    }
    运行结果:
    25
    36.5
    -123.7
    36.35
      

  4.   


    不论是否单行模式,\s* 总能匹配\r或\n或\r\n吧,不像是楼主想表达的意思。
      

  5.   

    加上singleLine属性,或是在表达式最前面写(?s)换行可能更全面的称呼为回车换行,