【发布时间】:2013-10-21 15:25:33
【问题描述】:
我有一个 CSV 文件,其中包含类似这样的行:
1, 4, 2, "PUBLIC, JOHN Q" ,ACTIVE , 1332
我正在寻找一个正则表达式替换,它将与这些行匹配并吐出类似这样的内容:
1,4,2,"PUBLIC, JOHN Q",ACTIVE,1332
我认为这很容易:我创建了表达式 ([ \t]+,) 并将其替换为 ,。我做了一个补充表达式(,[ \t]+) 替换为,,我认为我已经实现了右修剪和左修剪字符串的好方法。
...但后来我注意到我的"PUBLIC, JOHN Q" 现在是"PUBLIC,JOHN Q",这不是我想要的。 (注意逗号后面的空格现在已经消失了)。
什么是适当的表达方式来修剪逗号前后的空白,但保留引用的文本不变?
更新
为了澄清,我正在使用一个应用程序来处理文件。这个应用程序允许我定义多个正则表达式替换;它不提供解析功能。虽然这可能不是理想的机制,但它肯定会胜过为这个文件制作另一个应用程序。
【问题讨论】:
-
为什么不解析?
-
使用 CSV 解析器 - 不要试图重新发明轮子!查看Microsoft.VisualBasic.FileIO.TextFieldParser。
-
您将有一个正则表达式的怪物,因为它必须考虑检测它是否在引号之间,以及这些引号是否已被转义。正如其他评论者所说:解析,然后在没有空格的情况下重建。
-
@Ralf 我用 C# 和 .Net 对其进行了标记,因为它具有与 perl/php/java/javascript 不同的正则表达式;我只是想澄清一下。我正在使用的应用程序是用 C# 编写的内部应用程序。