用另一个字符串拆分字符串

时间:2011-12-03 18:28:06

标签: c# string

我有一个字符串,我需要用另一个字符串分隔,该字符串是原始字符串的子字符串。我们说我得到了以下文字:

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

提前感谢您的帮助。

5 个答案:

答案 0 :(得分:2)

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";
}

答案 1 :(得分:1)

无论如何,拆分“<TEXT>”在这种情况下无法帮助您,因为关闭标记为“</TEXT>”。

最强大的解决方案是将其正确解析为XML。 C#提供了执行此操作的功能。 http://msdn.microsoft.com/en-us/library/cc189056%28v=vs.95%29.aspx的第二个示例应该让您走上正确的轨道。

但是,如果您只是寻找快速而肮脏的一次性解决方案,那么您最好的选择就是手动编写代码,例如上面的dasblinkenlight解决方案。

答案 2 :(得分:1)

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);
}

答案 3 :(得分:1)

var output = new List<String>();
foreach (Match match in Regex.Matches(source, "<TEXT>(.*?)</TEXT>")) {
    output.Add(match.Groups[1].Value);
}

答案 4 :(得分:0)

如果最后一个标记是</doc>,那么您可以使用XElement.Load加载XML,然后通过它来发现想要的元素(您也可以使用Linq To XML)。

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