代码之家  ›  专栏  ›  技术社区  ›  Adam

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

  •  1
  • Adam  · 技术社区  · 6 年前

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

    例子:

    完整字符串=[http:something]一二三[http:anotherone]四[http:blahblah]sdksaod,cne 9ofew@:p{

    理想结果:

    string1=[http:something]一二三

    string2=[http:anotherone]4个

    字符串3=[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 回复  |  直到 6 年前
        1
  •  2
  •   Jimi    6 年前

    替代的无regex方法使用 string.Split()

    string pattern = "[http";
    
    string[] output = input.Split(new[] { pattern }, StringSplitOptions.RemoveEmptyEntries)
                           .Select(res => pattern + res).ToArray();
    

    自从 Split() 从它生成的字符串元素中删除分隔符,我们重新组合这些结果,使用LINQ添加回分隔符 Enumerable.Select() 方法生成新值。

        2
  •  1
  •   Konamiman    6 年前

    如果我理解正确,您的字符串由以 [text] 顺序。如果是这样的话,你肯定 [ 字符永远不会作为数据的一部分出现,您可以这样做:

    stringParts = Regex.Split(par, @"(?=\[)").Where(s => s != String.Empty).ToArray();
    

    或者你可以用 par.Split('[') 但是在这种情况下 [ 将从生成的字符串部分中移除。

        3
  •  0
  •   johnny 5    6 年前

    使用正则表达式可以做到这一点:

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