将一个字符串拆分为另一个字符串

本文关键字:字符串 拆分 另一个 一个 | 更新日期: 2023-09-27 18:16:53

我得到了一个字符串,需要用另一个字符串分隔,该字符串是原始字符串的子字符串。假设我收到了以下文本:

string s = "<DOC>something here <TEXT> and some stuff here </TEXT></DOC>"

我想检索:

"and some stuff here"

我需要在"<TEXT>"和他的储物柜"</TEXT>"之间找到绳子。

尽管其中一个函数参数的类型是string[],但我无法使用字符串的常见拆分方法来做到这一点。我正在尝试的是:

Console.Write(s.Split("<TEXT>")); // Which doesn't compile

提前感谢您的帮助。

将一个字符串拆分为另一个字符串

var start = s.IndexOf("<TEXT>");
var end = s.IndexOf("</TEXT>", start+1);
string res;
if (start >= 0 && end > 0) {
    res = s.Substring(start, end-start-1).Trim();
} else {
    res = "NOT FOUND";
}

在这种情况下,拆分"<TEXT>"对您没有任何帮助,因为关闭标记是"</TEXT>"。

最健壮的解决方案是将其正确解析为XML。C#提供了这样做的功能。上的第二个示例http://msdn.microsoft.com/en-us/library/cc189056%28v=vs.95%29.aspx应该会让你走上正轨。

然而,如果你只是在寻找一个快速而肮脏的一次性解决方案,你最好的选择是手动编写代码,比如上面dasblinkenlight的解决方案。

var output = new List<String>();
foreach (Match match in Regex.Matches(source, "<TEXT>(.*?)</TEXT>")) {
    output.Add(match.Groups[1].Value);
}
string s = "<DOC>something here <TEXT> and some stuff here </TEXT></DOC>";
string result = Regex.Match(s, "(?<=<TEXT>).*?(?=</TEXT>)").Value;

编辑:我使用的是这个正则表达式模式(?<=prefix)find(?=suffix),它将匹配前缀和后缀之间的位置。

编辑2:查找几个结果:

MatchCollection matches = Regex.Matches(s, "(?<=<TEXT>).*?(?=</TEXT>)");
foreach (Match match in matches) {
    Console.WriteLine(match.Value);
}

如果最后一个标记是</doc>,那么您可以使用XElement.Load加载XML,然后遍历它以发现所需的元素(您也可以使用Linq-to-XML(。

如果这不一定是正确的XML字符串,您可以始终使用Regural Expressions来查找所需的文本部分。在这种情况下,表达应该不难写出来自己。