如何在Notepad ++中使用Regex搜索和替换以仅在csv的第一列中更改字符

时间:2019-01-31 18:42:44

标签: regex csv

我有一个由客户提供的csv文件,第一列中有一个文件路径,然后是空白列,一个文件大小,然后是两个时间戳,然后是一个所有者,最后一个列通常是(尽管不是唯一的)列,空白。它可以包含文件的前500个字符的文本。

某些文件路径包含单引号双引号字符。

我的问题是找到可在Notepad ++中使用的正则表达式,以便仅在第一列中找到这些出现的内容,并用双引号对替换它们,以便为CSV文件正确地转义它们。

以下是三个示例行:

"/TCH-EXP/mnt/office/dept/ped/Bill New Structure/_Personal Folders/TFR/PowerPoint/Privat/Emilie Føs"da.ppt","",143872,Mon Mar  5 10:02:22 2007,Mon Mar  5 10:02:22 2007,"TFR012",""

"/TCH-EXP/mnt/office/dept/ped/Bill New Structure/_Personal Folders/TFR/Tfr/Siemens Data/Halfdan "B" data (2).msg","",2092544,Mon Feb  9 09:22:32 2004,Mon Feb  9 09:22:32 2004,"TFR012",""

"/TCH-EXP/mnt/office/dept/ped/Bill New Structure/_Personal Folders/TFR/Tfr/Siemens Data/Halfdan "B" data "20-nov-2003".msg","",1060864,Mon Feb  9 09:22:32 2004,Mon Feb  9 09:22:32 2004,"TFR012",""

在第一行中,我需要Føs"da.ppt才能成为Føs""da.ppt 在第二行中,我只需要"B"成为""B"" 在第三行中,我需要"B"""B"""20-nov-2003"""20-nov-2003""

是否可以使用一个正则表达式搜索和替换来解决所有这三种情况?

非常感谢!

我尝试了一个简单的搜索,使用捕获组在第一列中发现“”,但仅通过计数适当的逗号即可。

Search: ^("/TCH-.*)"(.*","",.*,"")
Replace: $1""$2

这似乎适用于第一个示例,该示例中路径中只有一个“”。

1 个答案:

答案 0 :(得分:0)

如果使用notepad ++,可能会使用\G并使用否定的前瞻性来确保选择的"后面没有,"或末尾。字符串。

然后将其替换为完全匹配的$0,然后加上一个双引号。

查找内容

(?:\G(?!^)|"/TCH-EXP)[^"]+\K"+(?!,"|$)

替换为

$0"

说明

  • (?:\G(?!^)|"/TCH-EXP)上一场比赛的结束,而不是开始或比赛"/TCH-EXP
  • [^"]+匹配1次以上而不是双引号
  • \K"+忘记匹配的内容,并匹配1次以上"
  • (?!,"|$)断言否定断言右边的内容不是,"或字符串的结尾

Regex demo