我有一个txt文件,我试图将其作为平面文件导入到SQL2008中,如下所示:
“123456”,”some text”
“543210”,”some more text”
“111223”,”other text”
etc…
该文件有超过300.000行,文本很大(通常为200-500个字符),因此手动扫描文件非常耗时且容易出错。其他类似(甚至更复杂的文件)已成功导入。
这个的问题是,“某些行”在文本中包含引号...(这来自旧的SuperBase DB的导出,它不允许您指定文本量词,我无能为力除了清除它之外的文件并尝试导入它)。
所以“冒犯”的行看起来像这样:
“123456”,”this text “contains” a quote”
“543210”,”And the “above” text is bad”
etc…
您可以在此处查看问题。
现在,如果我可以使用可以使用正则表达式的文本编辑器执行搜索,300.000不是太多,我会手动删除每行的引号。问题不在于违规行数,而是通过简单搜索找不到它们的可能性。我确定它少于500,但是将它们分散在300.000行的txt文件中,你知道我的意思。
基于此,我可以用什么来识别这些线条的最佳正则表达式?
我的第一个想法是:告诉我哪些行包含更多而不是 4 引号(“)。
但我无法想出任何东西(除了基础知识,我不擅长正则表达式)。
答案 0 :(得分:7)
此模式^("[^"]+){4,}
将匹配“包含4个以上引号的行”
您可以尝试将4
替换为5
或更多,具体取决于您的数据。
答案 1 :(得分:4)
我认为你可以使用正则表达式直接比你计划的更直接。根据你的正则表达方言,这样的事情应该这样做:
^"\d+",".*".*"
答案 2 :(得分:1)
您还可以使用正则表达式删除外部引号并使用更好的分隔符。例如,搜索^"([0-9]+)","(.*)"$
并将其替换为\1+++++DELIM+++++\2
。
当然,这不能直接回答你的问题,但它可能会解决问题。