有一个字符串“字段1 = abc,字段2 = 123”
字段1、2固定 abc、123是可变的
我怎么根据字段1、2查找出abc和123?
注意给出查找不到时的异常处理
还有找到以后怎么样替换?可以用正则表达式也可以用其他办法谢谢大家

解决方案 »

  1.   

    有一个字符串“字段1 = abc,字段2 = 123”
    请将这个字符串完整地写下来,免得到时候不能使用!
      

  2.   

    完整不完整用什么关系?
    难道要根据字段的长度直接取固定长度位置么?那肯定不行的
    “字段1 = abc,字段2 = 123”前后各有不定长字符串
    只能用查找的方式
      

  3.   

    用没有类似Format的方式?
    就是写"字段1 = {0},字段2 = {1}"然后把{0}和{1}输出到变量里面或者有正则表达式的也可以
      

  4.   

    那就这样吧string v1 = textBox1.Text;
    string v2 = textBox2.Text;
    string str = string.Format("字段1 = {0},字段2 = {1}", v1, v2);
      

  5.   

    试试用Substring和Indexof:
            string a = "字段1 = abcaaab,字段2 = 123123123";
            string a1 = a.Substring(a.IndexOf("字段1 =") + "字段1 =".Length, a.IndexOf("字段2") - (a.IndexOf("字段1 =") + "字段1 =".Length)-1);
            string a2 = a.Substring(a.IndexOf("字段2 =") + "字段2 =".Length);
      

  6.   

    string str=“字段1 = abc,字段2 = 123”string[] arr=str.Split(new char[]{'=',','},StringSplitOptions.RemoveEmptyEntries);arr[1]//abc
    arr[3]//123
      

  7.   

    你给的只能是"%字段1 = abc,字段2 = 123"中用
    实际上我的是"%字段1 = abc %(这里还有很多不知道是什么的内容)字段2 = 123"
      

  8.   

    public string GetField(string text,string field)
    {
        Match m = Regex.Match(text,"(?<="+field+@"\s*=\s*).+(?=,|$)");
        return m.Success?m.Value:string.Empty;
    }
      

  9.   

    调用
    string s ="字段1 = abc,字段2 = 123";
    string s1 = GetField(s,"字段1");
    string s2 = GetField(s,"字段2");
      

  10.   


    能和我讲讲用法么?
    我调用下了下
    string Cols1 = GetField(ReadText, "字段1");
    得到的是空值因为正则表达式我不懂 麻烦您了
      

  11.   

    原文里面是字段1 = abc
    =前后有空格的 是这个原因么
      

  12.   

    居然会没开vs会出这么低级错误……private static void TesrRegex01()
    {
        string s = "字段1 = abc,字段2 = 123";
        string s1 = GetField(s, "字段1");
        string s2 = GetField(s, "字段2");
        Console.WriteLine(s1);
        Console.WriteLine(s2);
    }public static string GetField(string text, string field)
    {
        Match m = Regex.Match(text, "(?<=" + field + @"\s*=\s*)[^,,\r\n]+");
        return m.Success ? m.Value : string.Empty;
    }
    ps,客客是被楼主你误导的。表说人家回答的不对。
      

  13.   

    替换的话,多次执行比较慢的,如果你规定好格式,可能快一些哦。
    public static string ChangeField(string text, string field,string value)
    {
        return Regex.Replace(text, "(?<=" + field + @"\s*=\s*)[^,,\r\n]+",value);
    }private static void TesrRegex01()
    {
        string s = "字段1 = abc,字段2 = 123";
        string s1 = GetField(s, "字段1");
        string s2 = GetField(s, "字段2");
        Console.WriteLine(s1);
        Console.WriteLine(s2);
        Console.WriteLine(ChangeField(ChangeField(s, "字段1", "value1"), "字段2", "value2"));
    }
      

  14.   


    无牙,这样做也太那个了用委托+HashTable替换
      

  15.   

    哈。显然不可取。
    按照客客师傅的,用Dictionary实现一个稍微快一点的.private static void TesrRegex01()
    {
        string s = "字段1 = abc,字段2 = 123";
        string s1 = GetField(s, "字段1");
        string s2 = GetField(s, "字段2");
        Console.WriteLine(s1);
        Console.WriteLine(s2);
        //Console.WriteLine(ChangeField(ChangeField(s, "字段1", "value1"), "字段2", "value2"));
        Dictionary<string, string> dict = new Dictionary<string, string>();
        dict.Add("字段1", "value1");
        dict.Add("字段2", "value2");
        Console.WriteLine(ChangValues(s, dict));
    }static string ChangValues(string text,Dictionary<string,string> changes)
    {
        StringBuilder regex_builder = new StringBuilder();
        regex_builder.Append("(?<=(");
        foreach (string field in changes.Keys)
        {
            regex_builder.Append("(" + field + ")|");
        }
        regex_builder.Remove(regex_builder.Length - 1, 1);//移除最后一个|
        regex_builder.Append(@")\s*=\s*)[^,,\r\n]+");
        return Regex.Replace(text, regex_builder.ToString(), delegate(Match m) { return changes[m.Groups[1].Value]; });
    }