Я немного борюсь. Файл, которым мне нужно манипулировать, это csv с точкой с запятой в качестве разделителя полей. В некоторых наборах данных был добавлен комментарий, который включает точку с запятой. К счастью, эти комментарии начинаются и заканчиваются ".

Пример:

;;;"sometext many words or few ; more text; even more text";;;;;;

Мне нужно заменить все точки с запятой на ", но оставить текст. Спасибо за помощь мне.

Примерный набор данных:

Before Regex find & Replace:  
Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11  
Dataset1: ;;text;text;;text;text;text;text;text;text  
Dataset2: text;"text text text ; text text";text;text;text;text;text;text;text;text;text

After Regex find & Replace:  
Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11  
Dataset1: ;;text;text;;text;text;text;text;text;text  
Dataset2: text;"text text text _ text text";text;text;text;text;text;text;text;text;text  

2 ответа2

1
  • Ctrl+H
  • Найти что: "[^";]*\K;(?=[^";]*")
  • Заменить на: _
  • проверить обернуть
  • проверьте регулярное выражение
  • Заменить все

Объяснение:

"           : a double quote
[^";]*      : 0 or more any character that is not a double quote or a semicolumn
\K          : forget all we have seen until this position
;           : a semicolumn
(?=         : start lookahead, make sure we have, after current position,
  [^";]*    : 0 or more any character that is not a double quote or a semicolumn
  "         : a double quote
)           : ed lookahead

Замена:

_       : an underscore

Результат для данного примера:

Fieldtitles: f1;f2;f3;f4;f5;f6;f7;f8;f9;f10;f11  
Dataset1: ;;text;text;;text;text;text;text;text;text  
Dataset2: text;"text text text _ text text";text;text;text;text;text;text;text;text;text    
0

В окне Заменить укажите следующее:

  • Найти что: \"(.*?);(.*?)\"
  • Заменить на: "\1_\2"
  • Проверьте радио-пулю Regular Expression .

Это заменит ; с _ в комментариях, которые включают одну точку с запятой. Распределение регулярных выражений:

  • \" - Начать сопоставление с двойных кавычек
  • (.*?); - сопоставить все до первой точки с запятой
  • (.*?)\" - сопоставить все до следующих двойных кавычек
  • "\1_\2" - выводить совпадающие двойные кавычки и подвыражения # 1 и # 2 при замене ; с _ .

Если в комментарии можно указать несколько точек с запятой, просто продолжайте нажимать « Replace AllWrap around опцией «Обтекание») - он будет заменять одну точку с запятой на комментарий за раз, пока не будут заменены все точки с запятой.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .