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

如何在逗号上拆分此字符串,但前提是它满足此条件?

c#
  •  2
  • mpen  · 技术社区  · 15 年前

    a[href="http://weird.url/has,commas"], strong
    

    我怎么能把它分成

    a[href="http://weird.url/has,commas"]
    strong
    

    ?


    max解决方案的修改版本:

        static IEnumerable<string> SplitSelectors(string str)
        {
            int openBrackets = 0;
            int lastIndex = 0;
    
            for (int i = 0; i < str.Length; ++i)
            {
                switch (str[i])
                {
                    case '[':
                        openBrackets++;
                        break;
                    case ']':
                        openBrackets--;
                        break;
                    case ',':
                        if (openBrackets == 0)
                        {
                            yield return str.Substring(lastIndex, i - lastIndex);
                            lastIndex = i + 1;
                        }
                        break;
                }
            }
            yield return str.Substring(lastIndex);
        }
    

    我忽略了引号,因为我不知道 无论如何,它们应该出现在属性选择器之外。我试图模仿jQuery规范,但我不完全确定在这个场景中它们是什么。

    2 回复  |  直到 15 年前
        1
  •  2
  •   max    15 年前
        static List<string> SplitByComma(string str)
        {
            bool quoted = false;
            bool attr = false;
            int start = 0;
            var result = new List<string>();
            for(int i = 0; i < str.Length; ++i)
            {
                switch(str[i])
                {
                    case '[':
                        if(!quoted) attr = true;
                        break;
                    case ']':
                        if(!quoted) attr = false;
                        break;
                    case '\"':
                        if(!attr) quoted = !quoted;
                        break;
                    case ',':
                        if(!quoted && !attr)
                        {
                            result.Add(str.Substring(start, i - start));
                            start = i + 1;
                        }
                        break;
                }
            }
            if(start < str.Length)
                result.Add(str.Substring(start));
            return result;
        }
    
        2
  •  1
  •   Andrew Kennan    15 年前

    for each char in text
      if char is quote
        if escaped = true
          escaped = false
        else
          escaped = true
      else if char is comma
        if escaped = true
          add char to token
        else
          begin new token
      else
        add char to token
    

    哪里 escaped