我有大量带双引号的CSV文件作为条目分隔符,但有些条目具有相同的字符,如下所示。
"MAIN 8" PIPE, PART B","Report 7"
我正在尝试匹配额外的“”字符,以便我可以用其他字符替换它来读取文件。
我尝试使用正则表达式([^","])"([^","])
。但它匹配字符8"
和7"
,我只想在"
中间的8"
。
我知道我需要检查结束字符并且不匹配我正在寻找的"
周围的字符。任何有关这方面的提示都表示赞赏。
答案 0 :(得分:1)
试试这个正则表达式:
(?<!^|",)"(?!,"|$)
OR
将每个匹配替换为其他字符,例如#
说明:(第一个正则表达式)
(?<!^|",)
- 匹配一个位置,该位置前面既不是字符串的开头,也不是序列",
"
- 按字面意思匹配"
(?!,"|$)
- 匹配不后紧跟字符串结尾或序列,"
答案 1 :(得分:0)
我正在使用Notepad ++,所以我可以在Replace窗口中使用以下正则表达式来执行此操作:
查找内容:
(^|,)([^"][^,]+?)"(?=,|$)
替换为:
\1\2
答案 2 :(得分:0)
我认为问题的根源应该是固定的。但是,您可以尝试以下解决方案来查找双引号并相应地替换它们:
搜索者:
(?<!,)(?<!^)\"+(?!\s*(?:,|$))
并替换你想要的任何东西
上述方法可行,但为了使其更安全,您应首先进行一些替换操作,否则我的或任何其他正则表达式解决方案都不适用于这样的情况:
"abac"c " , " blaljak"sdf "
所以你需要做的是删除双引号之前或之后的任何空格。
首先应用此替换操作:
\s*(\")\s*
并替换为:
\1
然后应用我提供的原始正则表达式。