将一个字符串拆分为另一个字符串
本文关键字:字符串 拆分 另一个 一个 | 更新日期: 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
来查找所需的文本部分。在这种情况下,表达应该不难写出来自己。