我如何拆分空格,在引号中保留空格而不是丢失我的平等

时间:2017-08-02 19:01:10

标签: c# regex

我对RegEx并不擅长,所以不熟悉我借用的这段代码中发生的事情。我想分割以下字符串:

CHARM CARD_SLOT=1 IO_SUBSYSTEM="CHARMS" CONTROLLER="CIOC-CB3-IO" DEFINITION="CHMIO_DO_24_VDC_HIGH-SIDE_CHARM"

所以这就是单个字符串,例如:(我想要返回的内容)

 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);
         }
    }                                        
 }

我目前正在返回

CHARM
CARD_SLOT
1
IO_SUBSYSTEM
CHARMS
CONTROLLER
CIOC-CB3-IO
DEFINITION
CHMIO_DO_24_VDC_HIGH-SIDE_CHARM

2 个答案:

答案 0 :(得分:1)

这符合您的示例:

var pattern = @"(\w[\w ]+=(?:""[^""]+""|[^ ]+))+";

var optionsList = Regex.Matches(src, pattern).Cast<Match>().Select(m => m.Value).ToList();

答案 1 :(得分:0)

这种模式应该有效:

  pattern = @"[^=]+=[^=]+(\s|.$)"; //matches with spaces
  pattern = @"[^=\s]+=[^=]+(?=(\s|.$))"; //matches without spaces

我的想法是在两侧(尤其是右侧)采取=和“环顾四周”。 在这两个模式中,我看它是以“”结尾还是字符串结束。最后,我使用超前功能删除匹配的空格,因为我们不需要它们。