2011-12-03 102 views
1

我得到了一个字符串,需要用另一个字符串分隔,这个字符串是原始字符串的一个子字符串。比方说,我有以下文字:将字符串拆分为另一个字符串

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

是最后一个标签''或''? – dasblinkenlight

+0

你是对的.... doc我会编辑它 –

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

indexOf for end应该从'start'的值开始搜索。 –

+0

@AshBurlaczenko谢谢,这是一个很好的建议!我会做一个编辑马上... – dasblinkenlight

1

分割的“<TEXT>”是不会帮助你在这种情况下,无论如何,由于靠近标签是“</TEXT>”。

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

但是,如果你只是在寻找一个快速而又脏的一次性解决方案,你最好的选择就是手动编码一些东西,比如上面的dasblinkenlight的解决方案。

0

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

如果这不一定是正确的XML字符串,你总是可以用Regural Expressions找到所需的文本部分。在这种情况下,表达式不应该很难自己写。

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

我将需要得到偶然的reasults有没有某种方式来获得这种方式很多reasults ...我的字符串包括很多

+0

请参阅我的编辑#2 。 –

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

输出列表不包含任何内容(非常感谢帮助) –

+0

@NadavStern:忘记了'?'。它现在应该工作。 – Otiel

+0

仍然不能正常工作 –

相关问题