所以我有一个文本文件,它为我提供逗号分隔的数据,这些数据用双引号括起来,如下所示:
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
请您参考如下方法:
这是因为 Regex.Split 使用模式来决定必须在何处拆分序列。换句话说,该模式描述的是分隔符,而不是您想要捕获的内容:
Splits an input string into an array of substrings at the positions defined by a regular expression pattern
要以您希望的方式使用表达式,您需要调用 Regex.Matches 以获得 MatchCollection ,并从该集合中检索单个匹配项:
string test = "\"foo\",\"bar\",\"1\",\"\",\"baz\"";
string pattern = "\"[^\"]*\"";
MatchCollection mc = Regex.Matches(test, pattern);
foreach (var m in mc) {
Console.WriteLine(m);
}
这是一个demo on ideone .
