Dwyane
挫折经历的太少,所以才把一些琐碎的小事看得很重要。
随笔 - 2,  文章 - 0,  评论 - 36,  阅读 - 4698

      前阶段工作时遇到一个截取字符串的问题,由于字符串比较长,大概得几万字符吧(XML形式),要提取中间两个节点之间的内容,在网上费了好大功夫才找到能用的正则。工作当用的时候碰到这样的事最蛋疼了,网上的资源虽多,但是要筛选,既费时又费心,还烦躁。

      现在得闲了,就为大家总结一下.NET截取字符串的方法,为了直观起见,我把每个方法用控制台演示一下,不足请补充,不好请见谅哈。

      string.Substring

      这个方法地球人都知道了,但是为了刚入门的小弟小妹看的直观,我写个超简单的代码运行一下:

              string str = "abcdefghijk";
            string subStr = str.Substring(0, 5);
            Console.Write(subStr);
            Console.ReadKey();

      结果:abcde,见下图:

     图像 1

      第一个参数是开始截取的索引(记住以0开始),第二个参数是截取的字符串长度。

      特殊的,比如说截取最后三个字符:

            string str = "abcdefghijk";
            string subStr = str.Substring(str.Length - 3, 3);
            Console.Write(subStr);
            Console.ReadKey();

      结果:ijk,见下图:

     图像 2

     实际就是变化一下思维。

     Substring经常和indexof函数配合使用,活学活用,没事可以搜搜相关的资料,最好能实践一下,加深印象。

     ②string.Split

     Split函数可以来截取带有特殊字符的字符串,比如说有个时间格式是这样的时间:2014-2-8,我要把它的年月日分别拿出来,你可以使用常规方法,也可以用Split函数:

复制代码
            string str = "2014-2-8";
            string[] stArray = str.Split(new char[1] { '-' });
            string subStrYear = stArray[0];
            string subStrMonth = stArray[1];
            string subStrDay = stArray[2];
            Console.Write(subStrYear);
            Console.Write("\n");
            Console.Write(subStrMonth);
            Console.Write("\n");
            Console.Write(subStrDay);
            Console.ReadKey();
复制代码

     结果:

     图像 3

     如果有多个特殊字符,比如:aa-bb-cc|dd|ee|ff,把Split参数换成new char[2] { ‘-’,’|’ }即可。

     Split函数还可以和正则表达式一起使用截取字符串:

            string str = "韦---德--你------真-棒";
            string[] strArray = System.Text.RegularExpressions.Regex.Split(str1, @"\-+");
            foreach (string i in strArray)
            Console.Write(i.ToString());
            Console.ReadKey();

     结果:

     图像 4

    ③正则表达式:

     首先提醒下,使用正则表达式需引用命名空间:System.Text.RegularExpressions;

     正则表达式用处广泛,截取个字符串什么的当然不在话下,在网上随便一搜,眼花缭乱的,但是到底能不能用,还得自己亲力亲为一下,自己试过能用才是真的能用。下面是我找了几个能用的正则演示一下:

    1."(?<=(‘截取开始位置’))[.\\s\\S]*?(?=(‘截取结束位置’))"

复制代码
            string str = "aabbccdd<Msg>This is I want</Msg>eeffgghh";
            string subStart = "<Msg>";
            string subEnd = "</Msg>";
            Regex MsgRegex = new Regex("(?<=(" + subStart + "))[.\\s\\S]*?(?=(" + subEnd + "))", RegexOptions.Multiline | RegexOptions.Singleline);
            Match MsgMc = MsgRegex.Match(str);
            string subString = MsgMc.Groups[0].Value;
            Console.Write(subString);
            Console.ReadKey();
复制代码

     结果:

    图像 5

   2."(?i)(?<=截取开始位置)[^\"]*(?=截取结束位置)"

            string str = "aabbccdd<Msg>This is I want again</Msg>eeffgghh";
            Match MsgMc = Regex.Match(str, "(?i)(?<=<Msg>)[^\"]*(?=</Msg>)");
            string subString = MsgMc.Groups[0].Value;
            Console.Write(subString);
            Console.ReadKey();

    结果:

    图像 7

    就举这两个例子吧,我不会写,也不好找。不会写得学啊,我在CSDN碰到了一个正则的大神推荐给大家,大家可以到他的空间学习:

    过客: http://my.csdn.net/lxcnn

    在这些方法的基础上再拓展和举一反三,应付截取字符串的工作应该问题不大了。好了,不早了,洗洗睡了。沉睡的弯月

posted on   Dwyanezdy  阅读(1559)  评论(13编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示