如何在c#中提取一串文本

时间:2011-10-09 06:04:20

标签: c# string split

我在c#中拆分字符串时遇到问题 有一个字符串(textbox0中的文字)

start and dffdfdddddddfd<m>one</m><m>two</m><m>three</m><m>four</m>dbfjnbjvbnvbnjvbnv and end

并且我想在按钮1中点击时在<m></m>之间提取文字,我需要 3输出:

输出1 : 一二三四(输出到textbox1)

输出2 : 四个(输出到文本框2)

输出3 : 一个(输出到文本框3)

我该怎么办?

我该怎么做?

请给我button1_Click

的完整代码

感谢和问候。

3 个答案:

答案 0 :(得分:6)

您可以尝试使用正则表达式捕获列表中的四个值,使用LINQ:

List<string> results = Regex.Matches(s, "<m>(.*?)</m>")
                            .Cast<Match>()
                            .Select(m => m.Groups[1].Value)
                            .ToList();

或者对于C#2.0:

List<string> results = new List<string>();
foreach (Match match in Regex.Matches(s, "<m>(.*?)</m>"))
{
     results.Add(match.Groups[1].Value);
}

然后,您可以使用string.JoinEnumerable.First(或results[0])和Enumerable.Last(或results[results.Length - 1])来获取所需的输出。

如果这是XML,则应使用XML解析器。

答案 1 :(得分:1)

对于使用Regex for XML和HTML的惯例警告:

您可以在<m></m>之间提取文字,如下所示:

     string input =
            "start and dffdfdddddddfd<m>one</m><m>two</m><m>three</m><m>four</m>dbfjnbjvbnvbnjvbnv and end";
     var matches = Regex.Matches(input, "<m>(.*?)</m>");
     foreach (Match match in matches)
     {
        Console.WriteLine(match.Groups[1]);
     }

答案 2 :(得分:1)

using System;
using System.Linq;
using System.Xml.Linq;

class Program{
    static void Main(string[] args){
        string data = "start and dffdfdddddddfd<m>one</m><m>two</m><m>three</m><m>four</m>dbfjnbjvbnvbnjvbnv and end";
        string xmlString = "<root>" + data + "</root>";
        var doc = XDocument.Parse(xmlString);
        var ie = doc.Descendants("m");
        Console.Write("output1:");
        foreach(var el in ie){
            Console.Write(el.Value + " ");
        }
        Console.WriteLine("\noutput2:{0}",ie.Last().Value);
        Console.WriteLine("output3:{0}",ie.First().Value);
    }
}