2

我有一个格式不正确的 CSV 文件,我需要寻找额外的引号。

这是它的样子:

"1","title","desc desc dejdg sdjgh djhg"

"2","title2","desc jhgdj "jhsgfjhsgd" jhgd"
                         ^^^^^^^^^^^^

我需要寻找之前"没有的任何东西,

(\")(?!\,) 

这意味着寻找任何"没有正确之后的东西,,但我不知道如何, ".

4

3 回答 3

2

您要求的正则表达式是

(?<!,)"

或者,如果您不反对匹配超出您的需要,您可以使用

(^|[^,])"

这将匹配前面的非逗号以及双引号,但对它的支持应该更广泛(不包括findstr)。

但是,对于解析 CSV 文件,您应该使用适当的解析器作为任何基于正则表达式的解决方案(至少我目前看到的用于此任务的解决方案)是

  • 容易出错
  • 不可读
  • 减缓
于 2013-08-15T10:16:44.777 回答
2

关于什么

[^,](\") 

?

请注意,这不会检测行首的引号(从技术上讲,它不以逗号开头的引号),但对于您的使用来说,这很好,因为行首的引号不是错误CSV 文件。

于 2013-08-15T10:18:16.337 回答
0

在 .NET 中,您可以使用TextFieldParser 类。添加Microsoft.VisualBasic对您项目的引用并尝试以下操作:

using System;
using System.Linq;
using Microsoft.VisualBasic.FileIO;

class Program
{
    static void Main(string[] args)
    {
        using (var tfp = new TextFieldParser("input.txt"))
        {
            tfp.Delimiters = new string[] { "," };
            tfp.HasFieldsEnclosedInQuotes = false;
            while (!tfp.EndOfData)
            {
                var fields = tfp.ReadFields();
                fields.ToList().ForEach(field =>
                {
                    Console.WriteLine(field);
                });
            }
        }
    }
}
于 2013-08-15T10:45:39.257 回答