正则表达式拆分不会给预期的结果

问题描述:

所以我有一个文本文件,它是喂养我逗号分隔括在双引号,像这样的数据:正则表达式拆分不会给预期的结果

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使用该模式来决定序列必须拆分的位置。换句话说,该模式描述隔板,不是说你想的内容,以捕获:

将输入字符串插入到由正则表达式模式所定义的位置的子串的阵列

要使用你想要的方式,你需要调用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

+0

啊,我明白这是有道理的。我想我实际上需要RegEx.Match或其他东西,或者改进我的RegEx实际使用分隔符而不是我想匹配的。谢谢。 – 2013-04-10 19:07:12

+0

好吧,得到它的工作,也使用了这个问题http://stackoverflow.com/questions/11416191/how-to-convert-matchcollection-to-string-array将匹配集合转换回字符串数组,以将其插入直接进入我的旧天真分裂代码的地方。 (接受它时会让我再次感谢!)。 – 2013-04-10 19:15:47