c# - 正则表达式用于删除逗号周围的空格(引用时除外)

标签 c# .net regex csv replace

我有一个 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" 这不是我想要的。 (请注意,逗号后面的空格现已消失)。

修剪逗号前后的空格但保持引用文本不变的适当表达式是什么?

更新

为了澄清,我正在使用一个应用程序来处理该文件。这个应用程序允许我定义多个正则表达式替换;它不提供解析功能。虽然这可能不是理想的机制,但它肯定会优于为这个文件创建另一个应用程序。

最佳答案

如果您的工具使用的引擎是C#正则表达式引擎,那么您可以尝试以下表达式:

(?<!,\s*"(?:[^\\"]|\\")*)\s+(?!(?:[^\\"]|\\")*"\s*,)

替换为空字符串。

这些人的答案假设引号是平衡的,并使用计数来确定空格是否是引用值的一部分。

我的表达式查找不属于引用值的所有空格。

RegexHero Demo

关于c# - 正则表达式用于删除逗号周围的空格(引用时除外),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19498592/

相关文章:

c# - .NET 中的 try-catch 执行 jQuery 脚本

javascript - 使用正则表达式选择圆括号内的内容

c# - 查找并替换方程式(正则表达式?)

c# - IOptions 绑定(bind)不适用于嵌套类

c# - 动态获取 Func<T,bool> 调用的结果

c# - 尝试在 C# 中构建一个可以从 VB5/6 引用和使用的 COM 组件

c# - 在 .NET Core 应用程序中使用 LTTng 事件

c# - 什么是 nAnt,它如何对我作为 C# 开发人员有用?

c# - 为什么根据 ReSharper 将 double-to-int 转换分配给冗余的动态变量?

java - 去除字符串中的空格