Удалить лишние трубы из середины строки в блокноте ++ - PullRequest
1 голос
/ 10 октября 2019

У меня есть текстовый файл с разделителями в виде трубы, в середине которого есть столбец со свободным текстом, а иногда этот свободный текст содержит канал, который выбрасывает весь файл при импорте в Excel.

Я знаючто в каждой строке должно быть 4 канала, поэтому я хочу идентифицировать строки с более чем 4 каналами и заменить третий на пробел.

Местоположение | Дата | Комментарий | Система |

NYC |10.10.2019 | правильно | windows |

Лос-Анджелес | 10.10.2019 | ошибка | 5 | windows |

Чикаго | 10.10.2019 | ошибка 3 | Linux |

Я уже выяснил, как определить линию с более чем 4 трубами:

^([^|\r\n]*\|){5}

Я не смог найти, как заменить третью трубу.

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 10 октября 2019

Логика такова: захватить число N-1 не труб, за которым следует труба и следующие 0 или более нетруб, в группу 1, затем сопоставить N-ю трубу, а затем захватить M-N количество не-трубсимволы канала, за которыми следует труба (N - это труба для удаления вхождения, а M - сколько труб должно быть на линии).

Вы можете использовать

Найти что : ^((?:[^|\r\n]*\|){2}[^|\r\n]*)\|((?:[^|\r\n]*\|){2}) Заменить на : $1 $2

Подробности

  • ^ - начало строки
  • ((?:[^|\r\n]*\|){2}[^|\r\n]*) - Группа захвата 1 ($1): два повторения 0+ символов, кроме pipe, LF и CR, с последующей трубкой, а затем 0+ символов, кроме pipe, LF и CR
  • \| -третий |
  • ((?:[^|\r\n]*\|){2}) - Группа захвата 2 ($2): два повторения 0+ символов, кроме pipe, LF и CR, за которыми следует труба.

Тест и настройки:

enter image description here

...