函数
public void RunTest()
{
const string toTest = "\"AAA, BBB\", \"CCC\", \"DDDD\"";
var exp = new Regex("\G(?:^|,)\s*\"([^\"])\"");
var matches = exp.Matches(toTest);
foreach (var match in matches.Cast())
{
Console.WriteLine(@"Matched expression: {0}", match);
foreach (var group in match.Groups.Cast())
{
Console.WriteLine(@"Matched group: {0}", group);
}
}
}
将返回
Matched expression: "AAA, BBB"
Matched group: "AAA, BBB"
Matched group: AAA, BBB
Matched expression: , "CCC"
Matched group: , "CCC"
Matched group: CCC
Matched expression: , "DDDD"
Matched group: , "DDDD"
Matched group: DDDD
所以每隔一组收集一次,你就会得到我想你想要的。
请注意,我在您的 DDDD 周围添加了双引号。我以为那是一个错字。
如果不是错字,您可以尝试正则表达式:
var exp = new Regex("\G(?:^|,)(?:\s(?:\"([^\"])\")|([^\",]))");
说明:
\G The match must occur at the point where the previous match ended.
[^"] Any character except the double quote
\s Any whitespace
* zero or more occurrences of the preceding element
( and ) define a group
(?: defines a noncapturing group
希望有帮助:)