我有一个格式不正确的CSV文件,我需要查找额外的引号。
这就是它的样子:
"1","title","desc desc dejdg sdjgh djhg"
"2","title2","desc jhgdj "jhsgfjhsgd" jhgd"
^^^^^^^^^^^^
我需要查找之前没有"
的任何,
:
(\")(?!\,)
这意味着要查找之后没有"
的任何,
,但我不知道如何寻找,
之前 "
。
答案 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);
});
}
}
}
}