我正在尝试为Split函数定义一个正则表达式,以便获取由空格分割的所有子字符串,省略那些用单引号标记的空格。
示例:
key1:value1 key2:'value2 value3'
我需要这些分开的值:
KEY1:数值1
key2:'value2 value3'
我试图以不同的方式执行此操作:
这段代码我错了什么?
你能帮帮我吗?
提前致谢
答案 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
你的尝试:
(\ 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'