我有一个获得通过提取用双引号
搜索字符串包围的字符串如正则表达式的方法,d
我想过滤掉所有包含双引号(“”)的子字符串。 在上述样本输出应包含:
“A + B”, “C”, “d + e” 的
有一种方法来做到这一点没有循环?
而且我当时需要提取没有上述值的字符串做进一步的处理
例如:A,B,AB,d
如何以最小的性能做到这一点的任何建议影响?
预先感谢您为您的所有意见和建议
我有一个获得通过提取用双引号
搜索字符串包围的字符串如正则表达式的方法,d
我想过滤掉所有包含双引号(“”)的子字符串。 在上述样本输出应包含:
“A + B”, “C”, “d + e” 的
有一种方法来做到这一点没有循环?
而且我当时需要提取没有上述值的字符串做进一步的处理
例如:A,B,AB,d
如何以最小的性能做到这一点的任何建议影响?
预先感谢您为您的所有意见和建议
既然你没有说你究竟是如何想你的输出(你需要保持逗号和多余的空格什么?它是逗号分隔的开始与假设,这不是逗号分隔,你只是想删除“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));
要获得的项目清单,而不周围的引号,你既可以逆转的正则表达式模式,或使用在第一个替代方法示例代码,然后分裂的逗号,修剪空白(再次,假设要拆分的逗号,它听起来像你是)
首先,添加逗号到您的输出的末尾:
"a+b",a, b, "C","d+e",a-b,d,
然后,使用这个正则表达式:
((?<quoted>\".+?\")|(?<unquoted>.+?)),\s*
现在你有2个问题。开玩笑!
您必须找到一种不使用循环来提取匹配的方法,但至少它们通过使用组分开成带引号和不带引号的字符串。您可以使用lamdba表达式将数据拉出并加入,每个表达式用于带引号和不带引号,但它只是在幕后执行循环,并且可能比简单的for循环增加更多开销。这听起来像是你想在这里剔除性能,所以花时间和测试每种方法,看看什么给了最好的结果。
你能解释为什么循环被禁止吗?如果你允许循环,有很多方法可以做到这一点。另外,你是否打包了这个文件发送给外部代码,还是你的“进一步处理”是相同的过程? – Guvante
这是可能的,但引用字符串的格式是什么?你允许'''在引用字符串中被转义吗?你允许指定新行'\ n'吗? – nhahtdh
你可以看看这个:http://stackoverflow.com/a/13800082/1400768它是一个正则表达式来匹配或验证(因为它能够生成一组精确的)JavaScript字符串文字。在编写任何正则表达式之前,您需要有一个清晰的规范。 – nhahtdh