C# 如何在空格上拆分,将空格保留在引号中,而不丢失相等的空格
我不擅长正则表达式,所以不太熟悉我借用的代码中的情况。我要拆分以下字符串:C# 如何在空格上拆分,将空格保留在引号中,而不丢失相等的空格,c#,regex,C#,Regex,我不擅长正则表达式,所以不太熟悉我借用的代码中的情况。我要拆分以下字符串: CHARM CARD_SLOT=1 IO_SUBSYSTEM="CHARMS" CONTROLLER="CIOC-CB3-IO" DEFINITION="CHMIO_DO_24_VDC_HIGH-SIDE_CHARM" 这是单个字符串,比如:(我想返回的内容) 我正在使用以下代码: while (null != (workString = s.ReadLine())) {
CHARM CARD_SLOT=1 IO_SUBSYSTEM="CHARMS" CONTROLLER="CIOC-CB3-IO" DEFINITION="CHMIO_DO_24_VDC_HIGH-SIDE_CHARM"
这是单个字符串,比如:(我想返回的内容)
我正在使用以下代码:
while (null != (workString = s.ReadLine()))
{
RegexOptions options = RegexOptions.None;
Regex regex = new Regex(@"((""((?<token>.*?)(?<!\\)"")|(?<token>[\w]+))(\s)*)", options);
var result = (from Match m in regex.Matches(workString)
where m.Groups["token"].Success
select m.Groups["token"].Value).ToList();
foreach (string o in result)
{
if (!o.Contains("{") || !o.Contains("}"))
{
endResult = endResult + "\r\n" + o;
Console.WriteLine("'{0}'", "\r\n" + o);
}
}
}
这与您的示例相符:
var pattern = @"(\w[\w ]+=(?:""[^""]+""|[^ ]+))+";
var optionsList = Regex.Matches(src, pattern).Cast<Match>().Select(m => m.Value).ToList();
var模式=@“(\w[\w]+=(?:“”[^”“]+“”[^]+)+”;
var optionsList=Regex.Matches(src,pattern).Cast().Select(m=>m.Value).ToList();
此模式应适用于:
pattern = @"[^=]+=[^=]+(\s|.$)"; //matches with spaces
pattern = @"[^=\s]+=[^=]+(?=(\s|.$))"; //matches without spaces
我的想法是在两边(尤其是右边)都使用=
和“环顾四周”。
在这两种模式中,我查看它是以“”结尾,还是字符串的末尾。最后,我通过使用前瞻功能删除匹配的空格,因为我们不需要它们。尝试
Regex.Matches(s,@“([^=]+)=(\s+)).Cast()。选择(m=>new[]{m.Groups[1]。Value,m.Groups[2]。Value})
,请参阅。或者甚至可以尝试使用正则表达式。如果你想在一行中使用魅力卡\u SLOT=1
,那么就不能在所有空格上拆分。你的和AmoT都有效,但AmoT的模式是截断引号中包含多个单词的任何内容。你的工作做得很好,所以我会给你评分。谢谢
var pattern = @"(\w[\w ]+=(?:""[^""]+""|[^ ]+))+";
var optionsList = Regex.Matches(src, pattern).Cast<Match>().Select(m => m.Value).ToList();
pattern = @"[^=]+=[^=]+(\s|.$)"; //matches with spaces
pattern = @"[^=\s]+=[^=]+(?=(\s|.$))"; //matches without spaces