使用正则表达式从CSV中删除额外引号字符

时间:2018-01-21 05:30:27

标签: regex csv

我有大量带双引号的CSV文件作为条目分隔符,但有些条目具有相同的字符,如下所示。

"MAIN 8" PIPE, PART B","Report 7"

我正在尝试匹配额外的“”字符,以便我可以用其他字符替换它来读取文件。

我尝试使用正则表达式([^","])"([^","])。但它匹配字符8"7",我只想在"中间的8"

我知道我需要检查结束字符并且不匹配我正在寻找的"周围的字符。任何有关这方面的提示都表示赞赏。

3 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

(?<!^|",)"(?!,"|$)

Click for Demo

OR

(?<!^)(?<!",)"+(?!,"|$)

将每个匹配替换为其他字符,例如#

说明:(第一个正则表达式)

  • (?<!^|",) - 匹配一个位置,该位置前面既不是字符串的开头,也不是序列",
  • " - 按字面意思匹配"
  • (?!,"|$) - 匹配后紧跟字符串结尾或序列,"
  • 的位置

答案 1 :(得分:0)

我正在使用Notepad ++,所以我可以在Replace窗口中使用以下正则表达式来执行此操作:

查找内容:

(^|,)([^"][^,]+?)"(?=,|$)

替换为:

\1\2

答案 2 :(得分:0)

我认为问题的根源应该是固定的。但是,您可以尝试以下解决方案来查找双引号并相应地替换它们:

搜索者:

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

并替换你想要的任何东西

Regex 101 Demo

上述方法可行,但为了使其更安全,您应首先进行一些替换操作,否则我的或任何其他正则表达式解决方案都不适用于这样的情况:

"abac"c    "    ,  "   blaljak"sdf "

所以你需要做的是删除双引号之前或之后的任何空格。

首先应用此替换操作:

\s*(\")\s*

并替换为:

\1

然后应用我提供的原始正则表达式。