2016-02-14 34 views
1

这与在其他地方解析文件之前清理文件有关,即格式不正确/丑陋的CSV。我看到大量的例子来删除/匹配某些字符串/字符/分隔符之间的所有字符,但我找不到任何特定的字符串。线的实施例部分将看起来像这样:正则表达式 - 如何删除字符串/分隔符之间的特定字符?

","Should now be allowed by rule above "Server - Access" added by Rich"\r 

需要明确的是,这不是整条线,但整个线被封闭在引号和由“”分隔和在^ M(视窗换行符结束/回车)。在这之前的'列'将在每边被“,”包围。我可能也会使用这个来删除出现在前面的cruft。

我想要去除“,”和“\ r(”服务器 - 访问“ - 这些之间的所有双引号)而不删除分隔符。或者,我可能会找到并替换它们用\“来为Ruby CSV库分隔它们。到目前为止,我有这样的:

(?<=",").*?(?="\\r) 

这基本上匹配分隔符之间的所有内容。如果我替换。*?与任何事情,是一封信,双引号等,我得到零比赛。我究竟做错了什么?

注意:这应该是Ruby兼容请。

+0

更换里面的比赛一个块。 –

+0

这不是一个可以用一个正则表达式完成的事情。您必须检查下一行的起始位置,然后确定该行是否正确开始,或者是否是嵌入行尾的结果。如果这是因为嵌入式行结束,那么您将需要适当地加入行。这不是一个简单的问题。 –

回答

0

如果我理解正确的话,你可以使用negative lookahead and lookbehind

text = '","Should now be allowed by rule above "Server - Access" added by Rich"\r' 
puts text.gsub(/(?<!,)"(?![,\\r])/, '\"') 
# ","Should now be allowed by rule above \"Server - Access\" added by Rich"\r 

当然,这是不行的,如果值本身可以包含昏迷和新线...

+0

这就是为什么我需要分隔符为“,”,然后是“\ r(包含双引号),而不仅仅是逗号或\ r。这样我知道我不会在列中产生任何内容。为了确保CSV库能够正确输出, – hatlord

+0

我的意思是,如果一个逗号可以成为字符串的一部分,那么就没有真正的保证你不会有'', '作为你的字符串的一部分,以及... –

+0

啊,我得到你,说实话,这是一场持续的战斗,但如果我能解析80%的这些文件,这对我的团队来说是一个巨大的减少。这将永远不需要面向客户的100%。我会给你的解决方案进行测试运行。谢谢! – hatlord

相关问题