我有一个字符串,我需要用另一个字符串分隔,该字符串是原始字符串的子字符串。我们说我得到了以下文字:
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
提前感谢您的帮助。
答案 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
来查找所需的文本部分。在这种情况下,表达式不应该难以自己编写。