所以我有一个文本文件,用逗号分隔数据,用双引号括起来,如下所示:
string test = "\"foo\",\"bar\",\"1\",\"\",\"baz\"";
我想捕获每个值,原来我只是简单地用逗号分隔,但我注意到有时候引号之间有逗号,所以我把它改为使用正则表达式来引用一个非常简单的正则表达式之间的所有引号:< / p>
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
答案 0 :(得分:4)
这是因为Regex.Split
使用模式来决定必须拆分序列的位置。换句话说,该模式描述了分隔符,而不是您要捕获的内容:
将输入字符串拆分为由正则表达式模式
定义的位置的子字符串数组
要以您希望的方式使用表达式,您需要调用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);
}