У меня есть 30 000 строк текста, которые содержат случайное количество пробелов. Мне нужно добавить символ только к первому ПРОБЕЛУ в каждой строке. Любой, кто может предложить что-нибудь, будет с благодарностью.
3 ответа
- 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.
Попробуйте TextPad. Вы можете записывать макросы, а затем воспроизводить их. Поэтому запишите, что вы хотите сделать для первой строки, и после того, как вы закончили первую строку, оставьте курсор в начале следующей строки. Затем просто воспроизведите макрос до конца файла. Или просто нажмите и удерживайте кнопку воспроизведения макроса.
То, что вы ищете, это регулярные выражения. Первое, что вы захотите сделать, это превратить ваш поиск в регулярные выражения
Радость должна была быть, потому что я думаю, что я точно знаю, как решить эту проблему
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 и попрактиковаться, пока не получите его правильно.