c#使用正则表达式提取内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#使用正则表达式提取内容相关的知识,希望对你有一定的参考价值。

使用正则表达式将下面一段string值中displayorder后的项目
ae321ec8-5be2-11e2-a67c-00248c47fb0c
ae321ed2-5be2-11e2-a67c-00248c47fb0c
a7048b5e-64e6-11e2-a6c0-00248c47fb0c
6433a747-56c2-11e2-8a22-00248c47fb0c
提取出来赋值给一个listbox。

Windows Boot Manager
--------------------
identifier 9dea862c-5cdd-4e70-acc1-f32b344d4795
device partition=C:
description Windows Boot Manager
locale zh-HK
inherit 7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e
integrityservices Enable
default ae321ed2-5be2-11e2-a67c-00248c47fb0c
resumeobject ae321ed1-5be2-11e2-a67c-00248c47fb0c
displayorder ae321ec8-5be2-11e2-a67c-00248c47fb0c
ae321ed2-5be2-11e2-a67c-00248c47fb0c
a7048b5e-64e6-11e2-a6c0-00248c47fb0c
6433a747-56c2-11e2-8a22-00248c47fb0c
toolsdisplayorder b2721d73-1db4-4c62-bf78-c548a880142d
timeout 0
displaybootmenu Yes

参考技术A string srcString = "
identifier 9dea862c-5cdd-4e70-acc1-f32b344d4795
device partition=C:
description Windows Boot Manager
locale zh-HK
inherit 7ea2e1ac-2e61-4728-aaa3-896d9d0a9f0e
integrityservices Enable
default ae321ed2-5be2-11e2-a67c-00248c47fb0c
resumeobject ae321ed1-5be2-11e2-a67c-00248c47fb0c
displayorder ae321ec8-5be2-11e2-a67c-00248c47fb0c
ae321ed2-5be2-11e2-a67c-00248c47fb0c
a7048b5e-64e6-11e2-a6c0-00248c47fb0c
6433a747-56c2-11e2-8a22-00248c47fb0c
toolsdisplayorder b2721d73-1db4-4c62-bf78-c548a880142d
timeout 0
displaybootmenu Yes
";
// 匹配 "<li>查询结果1:" 与 "</li>" 之间的所有字符的正则表达式
string regexStr = "displayorder (?<key>.*?)";
Regex r = new Regex(regexStr, RegexOptions.None);
Match mc = r.Match(srcString);
string dataStr = mc.Groups["key"].Value;追问

不行啊 什么提取不到

追答

string regexStr = "displayorder (?.*?)";
Regex r = new Regex(regexStr, RegexOptions.None);
Match mc = r.Match(srcString);
string dataStr = mc.Groups["key"].Value;
用着可以的

参考技术B Regex.Match(str, "displayorder[\\d\\D]+").Value.Substring("displayorder".Length);追问

不行 妈也没提取到

参考技术C 关机了,先标记下,如果没人回答,明早完善追问

吼吼 谢谢啦 麻烦了

追答

要评论的人来吧,我不好回答了。

参考技术D .8-.4-.4-.4-.12

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\\\\[/", "\\\\]");


这些就是需要注意的地方了,所以当你在提取时候如果有正则中特殊字符记得转义哈,不然会匹配不到的哦!
————————————————
版权声明:本文为CSDN博主「Syspan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40729514/article/details/95986966

以上是关于c#使用正则表达式提取内容的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

C#正则表达式提取多个结构键值

c# 正则表达式提取()中的值