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