正则表达式 - 如何删除字符串/分隔符之间的特定字符?

时间:2016-02-14 09:36:22

标签: ruby regex csv

这与在其他地方解析文件之前清理文件有关,即畸形/丑陋的CSV。我看到很多用于删除/匹配某些字符串/字符/分隔符之间的所有字符的示例,但我找不到任何特定的字符串。行的示例部分看起来像:

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

要清楚,这不是整行,而是整行用引号括起来,用","分隔。并以^ M结尾(Windows换行/回车)。'列'在此之前,将在每一侧用","封闭。我也可能会使用它来删除线路中较早出现的残骸。

我想要的是删除","之间的所有双引号。和" \ r \ n("服务器 - 访问" - 这些)而不删除分隔符。或者,我可能只是找到并用\"替换它们。为Ruby CSV库划分它们的界限。到目前为止,我有这个:

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

这基本上匹配分隔符之间的所有内容。如果我更换。*?有任何东西,是一个字母,双引号等,我得到零匹配。我做错了什么?

注意:请与Ruby兼容。

1 个答案:

答案 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

当然,如果值本身可以包含逗号和新行......这将无效。