Как найти и заменить с помощью Regex в Notepad ++, чтобы изменить символы только в первом столбце CSV - PullRequest
0 голосов
/ 31 января 2019

У меня есть файл 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 голосов
/ 31 января 2019

То, что вы можете сделать, если используете notepad ++, это использовать \G и использовать отрицательный прогноз, чтобы убедиться, что за выбранным " не следует ," или конец строки.

Затем заменить на полное совпадение $0, за которым следует дополнительная двойная кавычка.

Найти, что

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

Заменить на

$0"

Объяснение

  • (?:\G(?!^)|"/TCH-EXP) Конец предыдущего матча, но не в начале или матче "/TCH-EXP
  • [^"]+ Совпадение 1+ раз, не двойная кавычка
  • \K"+ Забудьте, что совпало, и совпадение 1+ раз "
  • (?!,"|$) Отрицательный взгляд вперед, чтобы утверждать, что справа не," или конец строки

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...