2

У меня есть 30 000 строк текста, которые содержат случайное количество пробелов. Мне нужно добавить символ только к первому ПРОБЕЛУ в каждой строке. Любой, кто может предложить что-нибудь, будет с благодарностью.

3 ответа3

0
  • Ctrl+H
  • Найти что: ^\S+\h\K
  • Заменить на: %
  • проверить обернуть
  • проверьте регулярное выражение
  • Заменить все

Объяснение:

^           # beginning of line
  \S+       # 1 or more non space
  \h        # 1 horizontal space
  \K        # forget all we've seen until this position

Замена:

%           # the character to insert

Дано:

I have 30,000 lines of text that have randon 
number of spaces in them. I need to add a character 
to just the first SPACE in each line. 
Any who can suggest anything would be 
greatly appreciated.

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

I %have 30,000 lines of text that have randon 
number %of spaces in them. I need to add a character 
to %just the first SPACE in each line. 
Any %who can suggest anything would be 
greatly %appreciated.

0

Попробуйте TextPad. Вы можете записывать макросы, а затем воспроизводить их. Поэтому запишите, что вы хотите сделать для первой строки, и после того, как вы закончили первую строку, оставьте курсор в начале следующей строки. Затем просто воспроизведите макрос до конца файла. Или просто нажмите и удерживайте кнопку воспроизведения макроса.

https://www.textpad.com/

0

То, что вы ищете, это регулярные выражения. Первое, что вы захотите сделать, это превратить ваш поиск в регулярные выражения

Радость должна была быть, потому что я думаю, что я точно знаю, как решить эту проблему

https://regex101.com/r/aW4gG2/1

Вы хотите выражение:
Найти: (^.*?)( )
Заменить: \1#\2

В регулярных выражениях это работает следующим образом: () означает "захват". Это означает, что он найдет эту очень специфичную группу, а затем вы можете обратиться к ней при замене на \1 или \2 или \3. Число начинается с 1, и вы считаете от открытого парантеза

^ означает начало с начала строки. (Поскольку вы хотите, чтобы ваша вставка закрывала ПЕРВОЕ пространство, это то, что мы будем искать, начиная с передней части, найдите первое пространство)

.*? эта часть находит первое слово перед пробелом. Это достигается путем создания в одной группе любого символа (.) Как можно большего числа (*), но наименьшего необходимого ? , Без знака вопроса вы просто захватите каждый символ (включая все пробелы)

( ) эта часть означает, что наша вторая группа - это пробел после первой. Это должно быть первым пробелом. Это то, что мы хотим вставить наш персонаж.

Замена

\1#\2

\1 относится к первому набору символов. А * в выражении означает, что набор символов может быть словом любой длины, включая 0.

# является символом вставки

\2\ - это, конечно, пространство.

В результате мы ставим знак # перед каждым первым пробелом. Если вы хотите это ПОСЛЕ первого пробела, это так же просто, как настройка замены

\1\2# будет ставить # после каждого первого пробела в строке.


Это сила регулярных выражений. Простой поиск и замена могут сделать вставку более точно, чем любой макрос. Он гибкий, быстрый и в большинстве случаев не такой сложный.

Вот отличный учебник для начинающих, который должен объяснить, что такое RegEx и почему он полезен. [ RegExOne ]. REO это тот, который заставил меня понять

Это учебное пособие, которое многие люди рекомендуют, если честно, я не смог понять его смысл. [ RegEx.Информация ]

На самом деле я никогда не возвращался в RegEx.info. Я сразу же перешел к Документации Notepad++, которая на самом деле была очень полезной. Это и, конечно, вы можете проверить с помощью [ RegEx101 ]. Единственное, что вы хотите сделать, это добавить /gm в выражение. Затем вы можете просто вставить фрагмент в TestString и попрактиковаться, пока не получите его правильно.

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