1

所以我有一个文本文件,它为我提供逗号分隔的数据,用双引号括起来,如下所示:

string test = "\"foo\",\"bar\",\"1\",\"\",\"baz\"";

我想捕获每个值,最初我只是用逗号分隔,但我注意到有时引号之间有逗号,所以我将其更改为使用正则表达式来使用非常简单的正则表达式来拉引号之间的所有内容:

string pattern = "\"[^\"]*\"";

使用 regexpal 这会返回我想要的结果,但是无论出于何种原因,当我在 c# 中运行这个小程序时,我会返回一个所有逗号的列表,而不是我真正感兴趣的值,我不太确定为什么。谁能发现我的错误?

string test = "\"foo\",\"bar\",\"1\",\"\",\"baz\"";
string pattern = "\"[^\"]*\"";
string[] lines = Regex.Split(test, pattern); //Returns a list of commas in quotes
4

1 回答 1

4

这是因为Regex.Split使用模式来决定必须在哪里拆分序列。换句话说,该模式描述了分隔符,而不是您想要捕获的内容:

在正则表达式模式定义的位置处将输入字符串拆分为子字符串数组

要以您希望调用的方式使用表达式Regex.Matches以获取 a MatchCollection,并从该集合中检索单个匹配项:

string test = "\"foo\",\"bar\",\"1\",\"\",\"baz\"";
string pattern = "\"[^\"]*\"";
MatchCollection mc = Regex.Matches(test, pattern);
foreach (var m in mc) {
    Console.WriteLine(m);
}

这是关于 ideone 的演示

于 2013-04-10T19:04:15.143 回答