2012-12-11 43 views
0

我有一个获得通过提取用双引号

搜索字符串包围的字符串如正则表达式的方法,d

我想过滤掉所有包含双引号(“”)的子字符串。 在上述样本输出应包含:

“A + B”, “C”, “d + e” 的

有一种方法来做到这一点没有循环?

而且我当时需要提取没有上述值的字符串做进一步的处理

例如:A,B,AB,d

如何以最小的性能做到这一点的任何建议影响?

预先感谢您为您的所有意见和建议

+0

你能解释为什么循环被禁止吗?如果你允许循环,有很多方法可以做到这一点。另外,你是否打包了这个文件发送给外部代码,还是你的“进一步处理”是相同的过程? – Guvante

+0

这是可能的,但引用字符串的格式是什么?你允许'''在引用字符串中被转义吗?你允许指定新行'\ n'吗? – nhahtdh

+0

你可以看看这个:http://stackoverflow.com/a/13800082/1400768它是一个正则表达式来匹配或验证(因为它能够生成一组精确的)JavaScript字符串文字。在编写任何正则表达式之前,您需要有一个清晰的规范。 – nhahtdh

回答

0

既然你没有说你究竟是如何想你的输出(你需要保持逗号和多余的空格什么?它是逗号分隔的开始与假设,这不是逗号分隔,你只是想删除“XYZ”的出现次数:

string strRegex = @"""([^""])+"""; 
    string strTargetString = @" ""a+b"",a, b, ""C"",""d+e"",a-b,d"; 
    string strOutput = Regex.Replace(strTargetString, strRegex, x => ""); 

将删除所有的项目(保留额外的逗号和空格)

如果你是在尝试克至做,你需要在每个单项比赛的东西,那么你可能会想尝试:

var y = (from Match m in Regex.Matches(strTargetString, strRegex) select m.Value).ToList<string>(); 
y.ForEach(s => Console.WriteLine(s)); 

要获得的项目清单,而不周围的引号,你既可以逆转的正则表达式模式,或使用在第一个替代方法示例代码,然后分裂的逗号,修剪空白(再次,假设要拆分的逗号,它听起来像你是)

0

首先,添加逗号到您的输出的末尾:

"a+b",a, b, "C","d+e",a-b,d, 

然后,使用这个正则表达式:

((?<quoted>\".+?\")|(?<unquoted>.+?)),\s* 

现在你有2个问题。开玩笑!

您必须找到一种不使用循环来提取匹配的方法,但至少它们通过使用组分开成带引号和不带引号的字符串。您可以使用lamdba表达式将数据拉出并加入,每个表达式用于带引号和不带引号,但它只是在幕后执行循环,并且可能比简单的for循环增加更多开销。这听起来像是你想在这里剔除性能,所以花时间和测试每种方法,看看什么给了最好的结果。