正则表达式查找所有引号之前没有逗号

时间:2013-08-15 10:14:20

标签: regex

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

这就是它的样子:

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

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

我需要查找之前没有"的任何,

(\")(?!\,) 

这意味着要查找之后没有"的任何,,但我不知道如何寻找, 之前 "

3 个答案:

答案 0 :(得分:2)

你要求的正则表达式是

(?<!,)"

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

(^|[^,])"

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

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

  • 易错
  • 不可读

答案 1 :(得分:1)

怎么样?
[^,](\") 

请注意,这不会检测行开头的引号(从技术上讲, 引号前面没有逗号),但是对于您的用法,这很好,因为开头的引号该行不是CSV文件中的错误。

答案 2 :(得分:0)

在.NET中,您可以使用TextFieldParser Class。将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);
                });
            }
        }
    }
}