REGEX表达式C#。通过引号外的空格拆分字符串

时间:2017-08-24 16:30:55

标签: c# regex string split

我正在尝试为Split函数定义一个正则表达式,以便获取由空格分割的所有子字符串,省略那些用单引号标记的空格。

示例:

key1:value1 key2:'value2 value3'

我需要这些分开的值:

  • KEY1:数值1

  • key2:'value2 value3'

我试图以不同的方式执行此操作:

  • Regex.Split(q,@“(\ s)^(' \ s ')”)。ToList();
  • Regex.Split(q,@“(\ s)(^'。 \ s。')”)。ToList();
  • Regex.Split(q,@“(?=。* \ s)”)。ToList();

这段代码我错了什么?

你能帮帮我吗?

提前致谢

3 个答案:

答案 0 :(得分:1)

一个工作示例:

(\w+):(?:(\w+)|'([^']+)')

(\w+)       # key: 1 or more word chars (captured)
:           # literal
(?:         # non-captured grouped alternatives
(\w+)       # value: 1 or more word chars (captured)
|           # or
'([^']+)'   # 1 or more not "'" enclosed by "'" (captured)
)           # end of group

Demo

你的尝试:

  

(\ S)^(' \ S&#39)

^表示行首,\s是一个空白字符。如果要使用not-operator,则仅适用于字符类[^\s] - > 1个字符不是空格。

答案 1 :(得分:0)

请尝试以下操作:

       static void Main(string[] args)
        {
            string input = "key1:value1 key2:'value2 value3'";
            string pattern = @"\s*(?'key'[^:]+):((?'value'[^'][^\s]+)|'(?'value'[^']+))";

            MatchCollection matches = Regex.Matches(input, pattern);
            foreach (Match match in matches)
            {
                Console.WriteLine("Key : '{0}', Value : '{1}'", match.Groups["key"].Value, match.Groups["value"].Value);
            }
            Console.ReadLine();
        }

答案 2 :(得分:0)

    var st = "key1:value1 key2:'value2 value3'";
     var result = Regex.Matches(st, @"\w+:\w+|\w+:\'[^']+\'");

    foreach (var item in result)
        Console.WriteLine(item);

结果应为:

key1:value1
key2:'value2 value3'