如何在空格之间匹配和提取所有内容

时间:2012-08-30 10:09:19

标签: c# .net regex

现在我有一个像这样的长字符串

{"" ,"" ,"" ,"" } , {"" ,"" ,"" ,"" } 

" "甚至Unicode字符之间可能存在任何内容。我用过这样的东西

string pattern = "\"([\u0000-\uffff]+)+\""; 

但它只返回所有内容而不是一个一个地返回。 我使用了Groups和Capture属性,Capture Collection有关于所有匹配的信息,但我仍然无法提取我需要的东西。我需要逐一提取""之间的所有内容。我不需要提取{ } " ",只需提取每个" "之间的内容。

所以在我的情况下应该返回8组,我该怎么做?

3 个答案:

答案 0 :(得分:1)

使用非贪婪捕获

string pattern = "\"([\u0000-\uffff])*?\"";

然后使用系统linq获取结果......

var matches=Regex.Matches(input,pattern).OfType<Match>();
var results=matches.Select(g=>g.Groups[1].Value).ToArray();

结果现在是一个包含所有匹配项的String []

答案 1 :(得分:0)

string pattern = "\"([\u0000-\uffff])+\""; 

应该这样做。

答案 2 :(得分:0)

如果模式","是可靠的分隔符(不能显示为文本),并且花括号和引号之间没有空格,则可以使用此方法:

        string input = @"{""a"",""b"","" my name is ""vul"" and it's nice "",""""},{"""","""","""",""""}";

        input = input
                .Replace("{", String.Empty)
                .Replace("}", String.Empty);

        var strings = input.Split(new string[] {@""","""}, StringSplitOptions.None);

        strings[0] = strings[0].TrimStart('"');
        strings[strings.Length - 1] = strings[strings.Length - 1].TrimEnd('"');