Regex виберіть лише певну кількість пробілів


2

Я використовую блокнот ++ і хочу зробити операцію пошуку та заміни.
Наприклад

  • 4 кількість пробілів означає 1 вкладку
  • 6 кількість пробілів означає 2 вкладки тощо.

У моєму файлі всі пробіли знаходяться на початку кожного рядка.

Який регулярний вираз я повинен використовувати, щоб знайти точну кількість пробілів?
Я хочу замінити пробіли на вкладки (наприклад, одинарні чи подвійні вкладки на основі 4 пробілів або 6 пробілів)

Примітка. Файл - це класифікаційний файл, який пояснює, що 4 пробіли - це батьківські, 6 пробілів - це дочірні та 8 пробілів - це дитина дитини.

Зразок файлу:

Agriculture, forestry and fishing
 Crop and animal production, hunting and related service activities
   Growing of non perennial crops
     Growing of cereals (except rice), leguminous crops and oil seeds
     Growing of rice
     Growing of vegetables and melons, roots and tubers

1
4 spacs = 1 вкладка - 5 пробілів = 2 вкладки - 7 пробілів = 3 вкладки - 9 пробілів = 4 вкладки
Ахмед АбуРа'ед

Відповіді:


4

Синтаксис регулярного вираження для з'ясування кількості пробілів на початку рядка є

 ^ (пробіл_характер) {number_of_spaces_to_be_found}
.
Наприклад, наступний регулярний вираз знайде 4 пробіли
 ^ {4}
.
У вікні заміни використовуйте
"\ t"
для заміни знахідки однією вкладкою.
Для використання двох вкладок
"\ t \ t"
.


Так, але цей regexp також отримає рядки, які мають 6 пробілів або будь-яке число, що перевищує 4, я хочу, щоб він перевірив, чи є в рядку рівно 4 пробіли, а за ними решта (будь-який символ)
Ахмед АбуРа'ед,

Домовились. Ви можете використовувати ^ {6} і замінити їх подвійними вкладками, а потім зробити ^ {4} і замінити їх на одинарні вкладки - я погоджуюся, що це не найкраще рішення - я все ще навчаюсь REGEX
Prasanna

Так, я думаю, що це вирішить проблему. Спасибі
Ахмед АбуРа'ед

Спробуйте додати символ долара у вираз ^ {4} - щоб він став подібним ^ {4} $. Якщо це вирішує ваше питання - прийміть мою відповідь
Прасанна

це добре, я зробив обхід і встиг вирішити його, починаючи з останньої класифікації, що надходить до батьків. Нарешті, мені довелося робити батьків вручну, тому що вони будуть виявлені неправильно, але, на щастя, їх не так багато, оскільки вони є батьками, тому я зробив їх вручну.
Ахмед АбуРаед

0

Можливо, наступна схема буде робити те, що ви хочете (кутові дужки оточують візерунки):

Чотири провідні пробіли стають однією вкладкою

Find: <^ {4}([^ ].*)$>
Replace: <\t\1>

Шість провідних пробілів стають двома вкладками

Find: <^ {6}([^ ].*)$>
Replace <\t\t\1>

Пояснення

  • Як зазначається в інших відповідях, ^відповідає початку рядка.
  • Також, як зазначалося, позначення фігурної дужки {#}вказує відповідність певній кількості повторень.
  • Наступний вміст у квадратних дужках, [^ ]- це клас символів, що відповідає одному символу, який не є пробілом (квадратні дужки визначають клас символів; провідне ^тут вказує на інвертування класу).
  • .*$ відповідає будь-якій кількості символів будь-якого типу (можливо, включаючи нові рядки, залежно від налаштування двигуна Regex) до кінця рядка.
  • Дужки, що оточують, ([^ ].*)вказують на певну групу в шаблоні, яка (сподіваємось, залежно від двигуна Regex у Блокноті ++), отримана в виразі Замінити на \1.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.