文本信息如下:
[email]
SMTP=smtp.163.com
port=25
希望把[]内的信息,即email读取出来,
希望把=前的信息,即SMTP读取出来。
希望把=后的信息,即smtp.163.com读取出来。
请问是要用正则表达式吗?如何进行读取呢?

解决方案 »

  1.   

    (?n)\[(?<section>[^\[\]]+)\]\r\n(?<maskSMTP>[^=]+)=(?<smtp>.+)\r\n(?<maskPort>[^=]+)=(?<port>.+)(\r\n|$)
      

  2.   

    貌似像ini的配置文件,用kernel32读取就好了
      

  3.   

            private void TestRegex05()
            {
                string yourStr = @"[email]
    SMTP=smtp.163.com
    port=25
    ";
                Match m = Regex.Match(yourStr, @"(?n)\[(?<section>[^\[\]]+)\]\r\n(?<maskSMTP>[^=]+)=(?<smtp>.+)\r\n(?<maskPort>[^=]+)=(?<port>.+)(\r\n|$)");
                MessageBox.Show("Section is " + m.Groups["section"].Value + Environment.NewLine +
                    "SMTP is " + m.Groups["smtp"].Value + Environment.NewLine +
                    "port is " + m.Groups["port"].Value);
            }
      

  4.   

            private void TestRegex09()
            {
                string yourStr = @"[email]
    SMTP=smtp.163.com
    port=25
    ";
                Match m = Regex.Match(yourStr, @"(?n)\[(?<section>[^\[\]]+)\]\r\n(?<maskSMTP>[^=]+)=(?<smtp>.+)\r\n(?<maskPort>[^=]+)=(?<port>.+)(\r\n|$)");
                StringBuilder txtBuilder = new StringBuilder();
                txtBuilder.AppendLine("[]中间内容不是已经分析出来了么?学习一下正则的分组,否则给你答案你都看不懂。");
                txtBuilder.AppendFormat("[]中间的内容:" + m.Groups["section"].Value + "\r\n");
                txtBuilder.AppendFormat("smtp=前面的内容" + m.Groups["maskSMTP"].Value + "\r\n");
                txtBuilder.AppendFormat("smtp=后面的内容" + m.Groups["smtp"].Value + "\r\n");
                txtBuilder.AppendFormat("port=前面的内容" + m.Groups["maskPort"].Value + "\r\n");
                txtBuilder.AppendFormat("port=后面的内容" + m.Groups["port"].Value);
                MessageBox.Show(txtBuilder.ToString());
            }
      

  5.   

            private void TestRegex10()
            {
                string yourStr = @"[email]
    SMTP=smtp.163.com
    port=25
    [mobile]
    City=GD
    Number=13800138000
    Number2=12345678912
    ";
                Dictionary<string, string> items = new Dictionary<string, string>();
                //分析段
                Match sectionMatch = Regex.Match(yourStr, @"(?sn)\[(?<section>[^\]]+)\].+?(?=\[[^\]]+\]|$)");
                while (sectionMatch.Success)
                {
                    //分析段内数据项
                    MatchCollection itemsMatch = Regex.Matches(sectionMatch.Value, @"(?m)(?<mask>[^=\r\n]+)=(?<value>[^=\r\n]+)");
                    foreach (Match m in itemsMatch)
                    {
                        items.Add(m.Groups["mask"].Value, m.Groups["value"].Value);
                    }
                    StringBuilder txBuilder = new StringBuilder();
                    txBuilder.AppendLine("section is " + sectionMatch.Groups["section"].Value);
                    Dictionary<string, string>.Enumerator em = items.GetEnumerator();
                    while (em.MoveNext())
                    {
                        txBuilder.AppendLine();
                        txBuilder.AppendLine("item mask : " + em.Current.Key + Environment.NewLine +
                            "item value : " + em.Current.Value);
                    }
                    MessageBox.Show(txBuilder.ToString());
                    items.Clear();
                    sectionMatch = sectionMatch.NextMatch();
                }            
            }
      

  6.   


    string pattern = @"\[(?<email>[^\[\]]+)\]\r\n(?<mask>[^=]+)=(?<smtp>.+)\r\n";
                Regex r = new Regex(pattern, RegexOptions.None);
                Match mm = r.Match(text);
                MessageBox.Show("email is " + mm.Groups["email"].Value + Environment.NewLine +
                                "mask is " + mm.Groups["mask"].Value.Trim() + Environment.NewLine +
                                "smtp is " + mm.Groups["smtp"].Value );