Замена спецификаций пробелов для вкладки

У меня есть большой текстовый файл с адресами, и я хочу разделить данные на 3 переменные. Пример:

NM_LOGRADO

Street BLA BLA BLA 340
Av BLE BLI 318
Road BLI 48 Block 4

Я хочу преобразовать в:

NM_LOGRADO

Street(TAB)BLA BLA BLA(TAB)340
Av(TAB)BLE BLI(TAB)318
Road(TAB)BLI(TAB)48 Block 4

В основном, замените первое пространство и последнее пространство перед первым номерным пространством по вкладке. Я использую Notepad++, а для второй замены я попытался заменить '(? = [0-9]) (? <=)' На '(TAB)' , но он заменил все пробелы перед цифрами (в третьем line Я получил Road(TAB)BLI(TAB)48 Block(TAB)4). Для первой замены я понятия не имею :(

3 ответа

Перейдите в меню " Search > " Replace (ярлык CTRL + H) и выполните следующие действия:

  1. Найти то, что:

    (?:^.+?\K | (?=[0-9]+.+))
  2. Заменить:

    \t
  3. Выберите переключатель "Регулярное выражение"

  4. Затем нажмите " Replace All

Вы можете протестировать его с помощью своего примера в regex101.

Обновление1:

На основе вашего обновленного примера попробуйте следующее:

Найти:

^([^ ]+) ([^0-9]+) (.+)

Заменить:

$1\t$2\t$3

Проверьте его на regex101.

Обновление2:

На основе вашего обновленного примера попробуйте следующее:

Найти:

(?:^[^ ]+\K |(?<!--Block|Ap) (?=[0-9]))
</code-->
<p> Заменить:</p> <pre class="prettyprint linenums"> \t </pre> <p> Проверьте его на <a href="http://regex101.com/r/wY6oH7" rel="nofollow noreferrer" target="_blank">regex101</a>.</p>


Я предполагаю, что (TAB) ссылается на символ табуляции, а не на буквенную строку.

Найти, что: ^(\w*) ((([AZ]{3})( )?)+) (\d.*)$

Замените: \1\t\2\t\6

(Если мое предположение было неправильным, замените \t на \(TAB\))

Ключ - это неотразимое пространство: ( )? , Это оставляет незавершенные начальные и конечные пробелы и поэтому заменяется символами табуляции.

Объяснение регулярных выражений:

^ Начало линии (\w*) Любое количество буквенно-цифровых символов, то есть "Улица", "Ав", "Дорога", ((([AZ]{3})( )?)+) 3 заглавных буквы, за которым следует одно неровное пространство, то есть "BLA BLA BLA", "BLE BLI", "BLI", (\d.*) Цифра, за которой следует любое число любых символов, то есть "340", "318", "48 Блок 4", $ Конец строки

\1 Первая группа захвата, "(\ w *)" \t Элемент табуляции \2 Вторая группа захвата "((([AZ] {3})()?) +)" \t Элемент табуляции \6 Шестая группа захвата, "(\ d. *)"


поскольку вы используете Notpad++, самый простой способ - не беспокоиться о регулярном выражении, а использовать макрос. просто запишите его и воспроизведите до конца строки. Вы захотите:

  1. наведите курсор на первый символ файла
  2. Макросы> Начало записи
  3. найти пробел и преобразовать его в tab (это заменит первое пространство строки)
  4. нажмите END, чтобы перейти в конец строки
  5. используйте команду "найти предыдущую", чтобы найти последнее пространство строки
  6. замените это пространство на вкладку
  7. перейти к следующей строке
  8. Макросы> Остановить запись
  9. Запустите макрос до конца файла.

licensed under cc by-sa 3.0 with attribution.