正则表达式 - 如何替换引号内的字符

thd*_*oan 8 regex

你好正则表达专家,

从来没有一个字符串操作问题,直到现在我无法用正则表达式解决,至少以一个优雅的方式使用一步.以下是我正在使用的示例数据:

0,"section1","(7)禁止在美国境外交付'证书'.由于1940年法规第339条,68 /和现行法律第341条在其陈述中明确规定应提供证书公民,只有当这样的个人在美国境内时,很明显该文件不能也不能在美国境外交付.",http://www.google.com/

1, "第2节" ,, HTTP://www.google.com/

2, "SECTION3", ",,",HTTP://www.google.com/

这是一个更大的CSV文件的一部分.使用一个优雅的正则表达式,我只想用双引号字符(_)替换双引号中出现的所有逗号.重要的是,正则表达式不会替换引号之外的任何逗号,因为这会弄乱CSV数据结构.

谢谢,汤姆

-

澄清:

对不起伙计们,我在没有完全澄清我的情况的情况下发布了这个问题,所以让我总结如下:

  • 假设引号内的引号已经转义(由Excel保存的CSV文件中的引号内的引号由"""""等表示,因此可以事先轻松替换它们).
  • 我在JavaScript中工作.

使用上面的示例文本,这是运行正则表达式替换后应该是什么样子(应该总共有5个替换):

0,"SECTION1","(7)在美国以外的'证书’禁止.交货自1940年statute_ 68的两部分339 /和本法第341是明确在他们的声明中表示,证书应提供的citizen_只有当这样的个人在美国境内时才会显示_很明显,该文件不能也不能在美国境外发送.",http://www.google.com/

1, "第2节" ,, HTTP://www.google.com/

2, "SECTION3", "__",HTTP://www.google.com/

Ala*_*ore 15

我会帮助你,但你必须承诺停止使用"优雅"这个词.最近一直在努力工作,值得休息.:P

(?m),(?=[^"]*"(?:[^"\r\n]*"[^"]*")*[^"\r\n]*$)
Run Code Online (Sandbox Code Playgroud)

如果在逗号和记录结尾之间有奇数个引号,则匹配逗号.我假设一种标准的CSV格式,其中记录在未包含在引号中的下一行分隔符处结束.行分隔符在引用字段内是合法的,如果它们与另一个引号一起转义,则为引号.

根据您使用的正则表达式风格,您可能必须使用\r?$而不是仅使用$.例如,在.NET中,只有linefeed(\n)被视为行分隔符.但在Java中,$符合之前\r\r\n,但不是之间的\r\n(除非你设置UNIX_LINES模式).

  • @Alan,我只需要再加一个括号就可以了,效果非常好!谢谢!`/,(?=[^"]*"(?:[^"\r\n]*"[^"]*")*[^"\r\n]*$)/mg` (2认同)