试图找出一种方法来获取字符串中两个可预测元素之间的文本(包括)。
示例:
Full String = [http:Something] One Two Three [http:AnotherOne] Four [http:BlahBlah] sdksaod,cne 9ofew {} @:P {
理想的结果:
String1 = [http:Something] One Two Three
String2 = [http:AnotherOne]四
String3 = [http:BlahBlah] sdksaod,cne 9ofew {} @:P {
目前我可以得到结果,但它非常混乱,以后可能更难更新。有没有更好的方法呢?
当前代码示例:
String par = "[http//blah.com] One Two Three [http://wow.com] Four Five
[http://another.com] Six";
String[] paramUrls = par.Split(' ');
List<String> paramPerURL = new List<String>();
String temp = "";
Boolean found = false;
for(int z = 0; z < paramUrls.Length; z++){
if(paramUrls[z].Contains("[http")){
if(found){
paramPerURL.Add(temp);
}
found = true;
temp = paramUrls[z] + " ";
} else{
temp += paramUrls[z] + " ";
}
if(z == paramUrls.Length -1){
paramPerURL.Add(temp);
}
}
答案 0 :(得分:2)
使用string.Split()的替代非正则表达式方法。
string pattern = "[http";
string[] output = input.Split(new[] { pattern }, StringSplitOptions.RemoveEmptyEntries)
.Select(res => pattern + res).ToArray();
由于Split()
从它产生的字符串元素中删除了分隔符,我们重新组合这些结果,使用Linq Enumerable.Select()方法添加分隔符以生成新值。
答案 1 :(得分:1)
如果我理解正确,您的字符串由以[text]
序列开头的部分组成。如果是这种情况,并且您确定[
字符永远不会作为数据的一部分出现,您可以执行以下操作:
stringParts = Regex.Split(par, @"(?=\[)").Where(s => s != String.Empty).ToArray();
或者您只能使用par.Split('[')
,但在这种情况下,初始[
将从结果字符串部分中删除。
答案 2 :(得分:0)
你可以用正则表达式做到这一点:
string str = "[http:Something] One Two Three [http:AnotherOne] Four [http:BlahBlah] sdksaod,cne 9ofew {}@:P{";
string pattern = @"(\[http:Something\].*)(\[http:AnotherOne\].*)(\[http:BlahBlah\].*)";
Regex regex = new Regex(pattern);
var match = regex.Match(str);
Console.WriteLine("String 1 : " + match.Groups[1]);
Console.WriteLine("String 2 : " + match.Groups[2]);
Console.WriteLine("String 3 : " + match.Groups[3]);