C# 正则表达式提取指定文本内的内容

直接上代码和如何使用

/// <summary>
        /// 截取字符串中开始和结束字符串中间的字符串
        /// </summary>
        /// <param name="source">源字符串</param>
        /// <param name="startStr">开始字符串</param>
        /// <param name="endStr">结束字符串</param>
        /// <returns>中间字符串</returns>
        public string SubstringSingle(string source, string startStr, string endStr)
        {
            Regex rg = new Regex("(?<=(" + startStr + "))[.\\s\\S]*?(?=(" + endStr + "))", RegexOptions.Multiline | RegexOptions.Singleline);
            return rg.Match(source).Value;
        }

        /// <summary>
        /// (批量)截取字符串中开始和结束字符串中间的字符串
        /// </summary>
        /// <param name="source">源字符串</param>
        /// <param name="startStr">开始字符串</param>
        /// <param name="endStr">结束字符串</param>
        /// <returns>中间字符串</returns>
        public List<string> SubstringMultiple(string source, string startStr, string endStr)
        {
            Regex rg = new Regex("(?<=(" + startStr + "))[.\\s\\S]*?(?=(" + endStr + "))", RegexOptions.Multiline | RegexOptions.Singleline);
            
            MatchCollection matches = rg.Matches(source);

            List<string> resList=new List<string>();

            foreach (Match item in matches)
                resList.Add(item.Value);

            return resList;
        }

 

用法如下:

string html="这里 Html 文本内容省略";

var text1 = regex.SubstringSingle(html, "<div id=\"pagelet_timeline_main_column\">", "<div id=\"pagelet_sidebar\"");

var text2 = regex.SubstringMultiple(html, "<div class=\"_4-u2 _4-u8\">", "<div class=\"_1dnh\">");

具体去自己体会吧,个人觉得很实用,这里是写成了扩展方法来调用的。

 

 /// <summary>
        /// 去除转义字符
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string RemoveEscapeChar(this string str,int re=0)
        {
            if (string.IsNullOrWhiteSpace(str))
                return "";

            if (re == 1) //不替换特殊字符
                return str;

            if (re == 2)  //不移除空格
                return str.Replace("\n", "").Replace("\t", "").Replace("\r", "");

            return str.Replace("\n", "").Replace("\t", "").Replace("\r", "").Replace(" ", "").Trim();
        }

上面是去除页面中转义字符,换行符的一个扩展方法,去除后再配合正则来进行筛选很实用,我个人主要用在对请求得到的html 指定内容进行提取。

 

2020年1月15号补充:

在使用的过程中难免会遇到一些正则表达式的特殊符号例如下面这个文本

oL[289]( x[/42.934715] y[/31.199666] z[/-0.929894] u[/-0.20919151978424] v[/-0.04218084669353] w[/0.97696452557019] )

我们要提取出  [ ]  中的内容,那么在写的时候就要加上转义了,如下代码我分别提取文本中的x,y,z,u,v,w中的值 使用 \\ 进行特殊符号转义

string temp_x = SubstringSingle(str, "x\\[/", "\\]");
string temp_y = SubstringSingle(str, "y\\[/", "\\]");
string temp_z = SubstringSingle(str, "z\\[/", "\\]");
string temp_u = SubstringSingle(str, "u\\[/", "\\]");
string temp_v = SubstringSingle(str, "v\\[/", "\\]");
string temp_w = SubstringSingle(str, "w\\[/", "\\]");

这些就是需要注意的地方了,所以当你在提取时候如果有正则中特殊字符记得转义哈,不然会匹配不到的哦!

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值