C#在部分限制器/短语之间获取文本

时间:2018-05-28 15:06:47

标签: c# .net string split

试图找出一种方法来获取字符串中两个可预测元素之间的文本(包括)。

示例:

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

3 个答案:

答案 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]);