当前位置:编程学习 > C#/ASP.NET >>

C# 字符串截取算法

如题:
string str1="app\\aa\\bb\\cc.dll";
string str2="app\\bb\\ee.exe";
string str3="app\\cc.bat";

求一个算法,我传入不同的string值,都可以获得这样的结果:
如果是strl,用集合添加的应该是:list.add("app","aa","bb");
一下类似...... --------------------编程问答-------------------- 第一步操作:
str1.split("\\");

如果有小数点的情况,进行第二步操作:
str.split(".");
取小数点左边的数据 --------------------编程问答--------------------

            List<string> list = new List<string>();
            list.Add("app");
            list.Add("abc");
            list.Add("ab");
            string s = "";
            foreach (string str in list)
            {
                if (String.IsNullOrEmpty(s))
                {
                    s = str;
                }
                else
                {
                    s = s + @"\\" + str;
                }
            }
            MessageBox.Show(s);
--------------------编程问答-------------------- 如果固定这种形式的话,只要去掉最后 \\ 的字符串,前面按\\分隔即可 --------------------编程问答-------------------- 用正则表达式灵活性更高。 --------------------编程问答-------------------- 正则表达式 --------------------编程问答-------------------- 这是我刚做出来的算法:
private void sub(string str)
        {
            string strs=str.Substring(0, str.IndexOf("\\"));
            MessageBox.Show(strs);
            try
            {
                string aa = str.Remove(0, str.IndexOf("\\")+1);
                sub(aa);
            }
            catch { }
        }不过,如果你讲TYR{}CATCH{}去掉了,就可以看到异常,判断一下就可以了。 --------------------编程问答--------------------
           List<string> list = new List<string>();
           string stemp = "app\\aa\\bb\\cc.dll";
            MatchCollection mstr = Regex.Matches(stemp, @"([\w.\w]*)");
            for (int i = 0; i < mstr.Count; i++)
            {
                list.add(mstr[i].Groups[1].Value);  
            }
--------------------编程问答-------------------- 正则表达式怎么写? --------------------编程问答-------------------- 正则!!! --------------------编程问答-------------------- 正则表达式处理 --------------------编程问答--------------------
引用 7 楼 tsapi 的回复:
C# code
           List<string> list = new List<string>();
           string stemp = "app\\aa\\bb\\cc.dll";
            MatchCollection mstr = Regex.Matches(stemp, @"([\w.\w]*)");
            for (i……

建议用?<data>这样的方式啊...
曾经维护一个程序,解析命令用了Groups[1]这样的方式,后来命令模式稍微改一下,我这里Groups后面的数字全部乱套了...苦不堪言... --------------------编程问答--------------------  不应该用星号,应该用加好
 
MatchCollection mstr = Regex.Matches(stemp, @"([\w\d.]+)");

 可以有数字、字母、点号,出现一次 --------------------编程问答-------------------- 用括号确定groups,不可能乱套 --------------------编程问答--------------------
引用 13 楼 tsapi 的回复:
用括号确定groups,不可能乱套

原来的命令只要3层括号,现在的需要多一层括号才能解析,一共十来个指令,多的一层那层括号还不统一,全部乱套。用命名方式比较直观,而且容易维护。。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 直接处理比较麻烦,最好添加一个头上的斜杠,变成

“\\app\\aa\\bb\\cc.dll”

然后用下面的正则捕获

\\\\(\w+)(?!.dll|.exe|.bat)\b
--------------------编程问答-------------------- 如果字符串一定都带文件名,那还有个偷懒的办法,“ \\”替换成"|",然后按“|”split,数组的最后一个不要就行了。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,