0 / 0 / 0 Регистрация: 28.07.2014 Сообщений: 3 |
|
1 |
|
Удаление символов в ячейке ексель28.07.2014, 02:57. Показов 20691. Ответов 4
Приветствую. 1. Замена комбинаций символов — в примере » » (двойной пробел) на » » (одиночный пробел) Обработка всего листа по всем столбцам с данными. Заранее благодарен.
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
28.07.2014, 02:57 |
4 |
ViterAlex 8927 / 4839 / 1885 Регистрация: 11.02.2013 Сообщений: 10,246 |
||||
28.07.2014, 04:56 |
2 |
|||
1 |
olegerius 0 / 0 / 0 Регистрация: 28.07.2014 Сообщений: 3 |
||||
28.07.2014, 05:11 [ТС] |
3 |
|||
Спасибо за ответ. Добавлено через 6 минут
0 |
8927 / 4839 / 1885 Регистрация: 11.02.2013 Сообщений: 10,246 |
|
28.07.2014, 06:32 |
4 |
Пробелы в начале и конце строки можно (и нужно) убирать функцией Trim
0 |
0 / 0 / 0 Регистрация: 28.07.2014 Сообщений: 3 |
|
28.07.2014, 11:18 [ТС] |
5 |
Прошу прощения за лохизм — пример нужен с условием.
0 |
You can remove characters by replacing a character with an empty string («»). Although you can do this by going through all such cells in a selection or specified range using Find & Replace, in this article we’re going to show you how to remove characters in Excel using VBA. This method can help you integrate this with other calculations and automate the process.
How to remove characters in Excel using VBA
There are 2 separate functions that we need to look at here:
- Find
- Replace
We need to use the Replace method to perform a removing action. For this, there are two parameters we should focus:
- What: String that we want to remove
- Replacement: Replacement value, which should be an empty string («») for removing the characters
You can assign these values into variables, or directly use them as an argument which is the case in the sample code we’re going to be using.
Alternatively, you can replace within a predetermined range, instead of a selected range. To do this, replace the Selection object with a Range object. You can find both examples at below.
You can use the code in two ways:
- Module
- Immediate Window
In the Module method, you need to add the module into the workbook or the add-in file. Copy and paste the code into the module to run it. The main advantage of the module method is that it allows saving the code in the file, so that it can be used again later. Furthermore, the subroutines in modules can be used by icons in the menu ribbons or keyboard shortcuts. Remember to save your file in either XLSM or XLAM format to save your VBA code.
The Immediate Window method, on the other hand, is essentially a quick and dirty method where you can simply copy and paste the code into the Immediate Window and press the Enter key to run it. Unfortunately, any code you use in the Immediate Window will not be saved. Also note that icons and keyboard shortcuts will not be available.
Remove a character in a selection
Module Version:
Sub RemoveCharacterInSelection Dim oldValue As String, newValue As String oldValue = "e" newValue = "" 'Because we want to remove 'oldValue and newValue variables are used as arguments Selection.Cells.Replace What:= oldValue, Replacement:= newValue, _ LookAt:=xlPart, SearchOrder:=xlByRows, _ MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End Sub
Immediate Window version (no variables):
Selection.Cells.Replace What:="e", Replacement:="", _ LookAt:=xlPart, SearchOrder:=xlByRows, _ MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Remove a character in a specified range
Module Version:
Sub RemoveCharacterInRange Dim oldValue As String, newValue As String, rng as Range oldValue = "e" newValue = "" 'Because we want to remove Set rng = Range("B2:E11") 'Replace action takes in rng range rng.Cells.Replace What:= oldValue, Replacement:= newValue, _ LookAt:=xlPart, SearchOrder:=xlByRows, _ MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False End Sub
Immediate Window version (no variables):
Range("B2:E11").Cells.Replace What:="e", Replacement:="", _ LookAt:=xlPart, SearchOrder:=xlByRows, _ MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Евгений Пользователь Сообщений: 11 |
Добрый день. Нужно написать макрос, который удаляет определенные символы (напримео XX) в начале каждой ячейки диапазона. Например: В какую сторону можно копать? |
Ham13 Пользователь Сообщений: 88 |
Выносишь в доп столбец (или в массив если макрос) первые два символа, там где в доп столбце символы равны ХХ, меняешь значение в основном столбце |
artemkau88 Пользователь Сообщений: 552 |
#3 05.11.2022 20:30:49 Евгений
, добрый вечер!
Прикрепленные файлы
|
||
Евгений Пользователь Сообщений: 11 |
Всем спасибо! Ham13 подсказал нужное направление, я сделал так: If rangeItem.Value Like (stringToDel & «*») Then |
Евгений Пользователь Сообщений: 11 |
#5 05.11.2022 20:46:26 Вот функция полностью:
Изменено: Евгений — 05.11.2022 20:47:45 |
||
New Пользователь Сообщений: 4581 |
#6 06.11.2022 01:32:34 допустим в ячейке А2 находится текст «XX123», тогда в ячейку В2 вводим =DeleteFirstSymbols(A2;»XX»)
|
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#7 07.11.2022 10:00:37 artemkau88, очень странно использовать для этого RegExp…
Изменено: Jack Famous — 07.11.2022 10:02:14 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|
Jack Famous
, почему? Думаю регулярками в разы проще задачи со строками решать, или я ошибаюсь. Изменено: artemkau88 — 07.11.2022 10:05:56 |
|
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
artemkau88, для использования регулярок, нужно, как минимум, знать правило создания шаблона для работы вашей «готовой» функцией. Для подобной задачи, это вообще не нужно, т.к. строковыми и понятнее и быстрее. Изменено: Jack Famous — 07.11.2022 10:11:04 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Jack Famous
, согласен, не все знают регулярки, и я тоже в их числе (глубоко не заглублялся пока) Функцию написал,
обновил еще раз(см. вложение) Изменено: artemkau88 — 07.11.2022 10:31:35 |
|
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#11 07.11.2022 10:26:00
Вариант, конечно, рабочий, но, как я уже ранее сказал, не вижу смысла усложнять на ровном месте… А также: 1. если .Global = False, то зачем .MultiLine = True Изменено: Jack Famous — 07.11.2022 10:29:09 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|
Jack Famous
, абсолютно согласен, обновил сообщение выше. |
|
Ігор Гончаренко Пользователь Сообщений: 13746 |
#13 07.11.2022 10:32:48
Изменено: Ігор Гончаренко — 07.11.2022 10:39:23 Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
Ігор Гончаренко, то же, что и в #6 , но дольше работать будет Изменено: Jack Famous — 07.11.2022 10:35:19 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
)) Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
ocet p Пользователь Сообщений: 438 |
#16 08.11.2022 00:46:27 такой вариант:
время перехода при обработке данных (1 миллион строк) в переменной массива: запуск/вызов (?) функции (на основе одного символа — не подходит для «смешанных символов», таких как: Xa, Xx, и т. д.):
|
||||
New Пользователь Сообщений: 4581 |
ocet p, у меня на 1млн строк («X123») вот так Изменено: New — 08.11.2022 01:39:35 |
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
New, там вообще всё очень неоптимально… ocet p, прошу прощения — тесты показывают преимущество вашего подхода для удаления повторяющихся символов. Изменено: Jack Famous — 08.11.2022 09:51:06 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#19 08.11.2022 09:56:15
ocet p, спасибо за науку! Изменено: Jack Famous — 08.11.2022 11:38:01 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
RAN, спасибо — очень интересно, но надо проверять самому. В любом случае, изучу Изменено: Jack Famous — 08.11.2022 11:38:47 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
ocet p Пользователь Сообщений: 438 |
#22 08.11.2022 15:08:08
на моей «машиночке» всё в три-четыре раза длиннее работает, она уже старинная — ваша это «быстрая машина»
рад, что привнес что-то в тему |
||||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#23 09.11.2022 13:08:39
не со всем согласен: в основном, кажется, что выигрыш сильно завышен. Может, это было актуально когда-то давно, но не сейчас. Каждое утверждение должно сопровождаться кодом — чтобы можно было сразу проверить обоснованность вывода. Часто, только по тексту теста (без исполнения) можно понять, что он некорректный/неполный.
Я вообще стараюсь использовать For Each только для перебора ключей словаря. Например For Each по большому количеству областей может вызвать ошибку, а счётчик такого никогда не допустит. Думаю, разница в том, что для For Each нужно сначала определить коллекцию, которую он будет перебирать и это не всегда получается…
В общем, доверяй, но проверяй (и подтверждай) Изменено: Jack Famous — 09.11.2022 13:21:24 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||||||||||
Jack Famous
, позвольте вопрос: а как же сложность алгоритма по которому выполняется код? Или им можно пренебречь, если знать все эти тонкости (из Вашего сообщения выше) и сверх этого? |
|
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#25 09.11.2022 13:53:24
не понял вопроса… Изменено: Jack Famous — 09.11.2022 13:53:49 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
artemkau88 Пользователь Сообщений: 552 |
#26 09.11.2022 14:06:10 Я имею в виду худшее время выполнения кода в нотации О большое, например: P.S:
один цикл не всегда лучше, чем 2, смотря что использовать внутри цикла Прикрепленные файлы
Изменено: artemkau88 — 09.11.2022 14:59:48 |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#27 09.11.2022 15:01:31 artemkau88, какого кода, какая нотация — вы о чём??? Темой не ошиблись?
откуда мне знать, как использование других приёмов повлияет на вашу сортировку? Пробуйте… При тестировании различных методик, всё остальное отметается для чистоты замера. Вы проезжаете 100 км за 2 часа. Средняя скорость 50 км/ч. Но вы едете и 150 и 20 км/ч — на разных участках. Изменено: Jack Famous — 09.11.2022 15:06:36 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
||
artemkau88 Пользователь Сообщений: 552 |
#28 09.11.2022 15:05:43 Да, прошу прощения, перетрудился я чего-то наверное.
понял, спасибо! Изменено: artemkau88 — 09.11.2022 15:06:21 |
||
Jack Famous Пользователь Сообщений: 10848 OS: Win 8.1 Корп. x64 | Excel 2016 x64: | Browser: Chrome |
#29 09.11.2022 15:07:59
artemkau88, пользуйтесь на здоровье Изменено: Jack Famous — 09.11.2022 15:30:22 Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄ |
|
artemkau88 Пользователь Сообщений: 552 |
#30 09.11.2022 15:09:21
да, спасибо!
Большое спасибо! |
||||
удаление символов средствами vba |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Skip to content
В этом руководстве показано, как использовать регулярные выражения для удаления части содержимого текстовой ячейки в Excel.
Вы когда-нибудь задумывались, насколько мощным был бы Excel, если бы кто-нибудь мог обогатить его набор инструментов регулярными выражениями? Мы не только подумали, но и поработали над этим А теперь вы можете добавить эту замечательную функцию RegEx в свои собственные книги и использовать регулярные выражения, чтобы удалить часть текста, соответствующего шаблону!
Ранее мы рассмотрели, как использовать регулярные выражения для замены текста в Excel. Для этого мы создали специальную функцию Regex Replace. Как оказалось, функция выходит за рамки своего основного предназначения и может не только заменять строки, но и удалять их. Как такое могло быть? С точки зрения Excel, удаление значения – это не что иное, как замена его пустой строкой, в чем функция Regex очень хороша!
- Функция VBA RegExp для удаления символов и текста в Excel
- Удалить все совпадения или конкретное совпадение
- Регулярное выражение для удаления определенных символов
- Удаляем группы символов с помощью регулярного выражения
- Регулярное выражение для удаления нечисловых символов
- Регулярное выражение для удаления всего после пробела
- Удаление текста после определенного символа
- Регулярное выражение для удаления всего до пробела
- Регулярное выражение для удаления всего перед символом
- Регулярное выражение для удаления всего, кроме
- Regex для удаления HTML-тегов в Excel
- Инструмент удаления символов и текста Ablebits Regex
- Как удалить текст в скобках с помощью регулярного выражения
Функция VBA RegExp для удаления символов и текста в Excel
Как мы все знаем, регулярные выражения не поддерживаются в Excel по умолчанию. Чтобы включить их, вам необходимо создать свою собственную пользовательскую функцию. Хорошая новость в том, что такая функция уже написана, протестирована и готова к использованию. Все, что вам нужно сделать, это скопировать этот код , вставить код в редактор VBA, а затем сохранить файл как книгу с поддержкой макросов (.xlsm).
Функция имеет следующий синтаксис:
RegExpReplace (текст; шаблон; замена; [instance_num]; [match_case])
Первые три аргумента являются обязательными, два последних — необязательными.
Где:
- Текст – текстовая строка для поиска.
- Шаблон – регулярное выражение для поиска.
- Замена – текст, на который нужно заменить. Чтобы удалить подстроки, соответствующие шаблону, используйте для замены пустую строку («»).
- Instance_num (необязательно) – экземпляр, который нужно заменить. Если не указан, заменяются все найденные совпадения (по умолчанию).
- Match_case (необязательно) – логическое значение, указывающее, следует ли учитывать регистр текста или игнорировать его. Для сопоставления с учетом регистра используйте ИСТИНА (по умолчанию); для нечувствительности к регистру – ЛОЖЬ.
Для получения дополнительной информации см. Функцию RegExpReplace .
Как упоминалось выше, чтобы удалить части текста, соответствующие шаблону, вы должны заменить их пустой строкой. Итак, общая формула принимает такую форму для удаления текста:
RegExpReplace(текст, шаблон; «»; [instance_num]; [match_case])
В приведенных ниже примерах показаны различные способы применения этой базовой концепции.
Удалить все совпадения или конкретное совпадение
Функция RegExpReplace предназначена для поиска всех подстрок, соответствующих заданному регулярному выражению. То, какие вхождения следует удалять, определяется четвертым необязательным аргументом с именем instance_num.
По умолчанию это «все совпадения». Если аргумент instance_num опущен, все найденные совпадения удаляются. Чтобы удалить конкретное, укажите его порядковый номер.
Предположим, вы хотите удалить нумерацию в приведенных ниже строках. Все такие числа начинаются со знака решетки (#) и содержат ровно 5 цифр. Итак, мы можем идентифицировать их с помощью этого регулярного выражения:
Шаблон: #d{5}b
Граница слова b указывает, что соответствующая подстрока не может быть частью более длинной строки, например #10000001.
Чтобы удалить все совпадения, аргумент instance_num не определен:
=RegExpReplace(A5; $A$2; «»)
Чтобы исключить только первое вхождение, мы устанавливаем аргумент instance_num равным 1:
=RegExpReplace(A5; $A$2; «»; 1)
Обе эти формулы вы видите на скриншоте выше.
Регулярное выражение для удаления определенных символов
Чтобы удалить определенные символы из строки, просто запишите все эти ненужные символы и разделите их вертикальной чертой |
. Она действует в регулярных выражениях как оператор ИЛИ.
Например, чтобы стандартизировать телефонные номера, записанные в различных форматах, сначала мы избавляемся от определенных символов, таких как круглые скобки, дефисы, точки и пробелы.
Шаблон: (|)|-|.|s
Формула будет для нашего примера такая:
=RegExpReplace(A5; “(|)|-|.|s”; “”)
Результатом этой операции является 10-значное число, например «1234567890».
Для удобства вы можете ввести регулярное выражение в отдельную ячейку и ссылаться на неё, используя абсолютную ссылку, например $A$2:
=RegExpReplace(A5; $A$2; «»)
А затем вы можете стандартизировать отображение телефонного номера по своему усмотрению, используя оператор конкатенации (&) и текстовые функции, такие как ПРАВСИМВ, ЛЕВСИМВ и ПСТР.
Например, чтобы записать все номера телефонов в формате (123) 456-7890, формула примет следующий вид:
=»(«&ЛЕВСИМВ(B5; 3)&») «&ПСТР(B5; 4; 3)&»-«&ПРАВСИМВ(B5; 4)
Где B5 – ячейка, в которой записана предыдущая формула RegExpReplace.
Пример вы видите на скриншоте выше.
Удаляем группы символов с помощью регулярного выражения
В одном из наших руководств мы рассмотрели, как удалить нежелательные символы в Excel с помощью встроенных функций. Регулярные выражения значительно упрощают эту работу. Вместо того, чтобы перечислять все символы, которые нужно удалить, просто укажите те, которые хотите оставить
Шаблон основан на инвертированных символьных классах – перед списком символов помещается этот значок ^
, чтобы искать любой одиночный символ НЕ в скобках. Квантификатор +
заставляет рассматривать последовательные символы как одно совпадение, так что замена выполняется для соответствующей подстроки, а не для каждого отдельного символа.
В зависимости от ваших потребностей выберите одно из следующих регулярных выражений.
Чтобы удалить не буквенно-цифровые символы, то есть все символы, кроме букв и цифр:
[^0-9a-zA-Zа-яА-Я]+
Чтобы удалить все символы, кроме букв, цифр и пробелов:
[^0-9a-zA-Zа-яА-Я ]+
Чтобы удалить все символы, кроме букв, цифр и подчеркивания, вы можете использовать W, обозначающий любой символ, НЕ являющийся буквенно-цифровым символом или подчеркиванием:
W+
Если вы хотите сохранить некоторые другие символы, например знаки препинания, поместите их в квадратные скобки.
Например, чтобы удалить любой символ, кроме буквы, цифры, точки, запятой или пробела, используйте следующее регулярное выражение:
[^0-9a-zA-Zа-яА-Я., ]+
Это успешно удаляет все специальные символы. Но если в тексте встречалось подряд несколько пробелов, то остается лишний пробел.
Чтобы исправить это, вы можете вложить указанную выше функцию в СЖПРОБЕЛЫ, которая заменяет несколько пробелов одним.
=СЖПРОБЕЛЫ(RegExpReplace(A5; $A$2; «»))
Результат вы видите на скриншоте ниже.
Регулярное выражение для удаления нечисловых символов
Чтобы удалить все нечисловые символы из строки, вы можете использовать либо эту длинную формулу, либо одно из очень простых регулярных выражений, перечисленных ниже.
Соответствует любому символу, который НЕ является цифрой:
D+
А вот так можно найти все нечисловые символы с помощью отрицательных классов:
[^0-9]+
или
[^d]+
В результате удалены все символы, кроме цифр:
Совет. Если ваша цель – удалить текст и разнести оставшиеся числа в отдельные ячейки или поместить их всех в одну ячейку, разделенную каким-то разделителем, используйте функцию RegExpExtract, как описано в статье «Как извлекать числа из строки с помощью регулярных выражений».
Регулярное выражение для удаления всего после пробела
Чтобы стереть все, что находится после пробела, используйте символ пробела – обычный
или такой s
, чтобы найти первый пробел. А затем примените .*
, чтобы найти любые символы после него.
Если у вас есть однострочные строки, которые содержат только нормальные пробелы (значение 32 в 7-битной системе ASCII), на самом деле не имеет значения, какое из следующих регулярных выражений вы используете. Если же в ячейке текст записан с переносами строки, то это имеет значение.
Чтобы удалить все после символа пробела, используйте это регулярное выражение:
Шаблон: .*
=RegExpReplace(A5; “.*”; «»)
Эта формула удалит все, что находится после первого пробела в каждой строке. Чтобы результаты отображались правильно, обязательно включите в формате ячейки перенос текста.
Чтобы удалить все, что находится после пробела (включая другие пробелы, табуляцию, возврат каретки и перенос строки), используйте такое регулярное выражение:
Шаблон: s.*
=RegExpReplace(A5; «s.*»; «»)
Поскольку s
соответствует нескольким различным типам пробелов, включая новую строку (n), эта формула удаляет все, что находится после первого пробела в ячейке, независимо от того, сколько в ней строк.
На скриншоте выше вы видите результат работы этих двух шаблонов. В первом случае удалено всё, что находится после пробела, в каждой строке текста в ячейке. Во втором случае удалено всё, начиная с первого пробела и до конца текста.
Удаление текста после определенного символа
Используя методы из предыдущего примера, вы можете удалить текст после любого указанного вами символа, а не только пробела.
Чтобы обрабатывать каждую строку текста отдельно:
Общий шаблон: символ. *
В однострочных строках это удалит все, что находится после символ
. В многострочных строках каждая строка будет обрабатываться отдельно, потому что в версии VBA Regex точка .
соответствует любому символу, кроме новой строки.
Чтобы обработать все строки текста как одну строку:
Общий шаблон: символ (.|n)*
Чтобы удалить что-либо после символа, включая новые строки, к регулярному выражению добавляется n
.
Например, чтобы удалить текст после первой запятой в строке, попробуйте следующие регулярные выражения:
,. *
,(.|n)*
На скриншоте ниже вы можете увидеть, чем отличаются результаты.
Удалены все символы либо до конца каждой строки, либо до конца всего текста в ячейке.
Регулярное выражение для удаления всего до пробела
При работе с длинными строками текста иногда может потребоваться сделать их короче, удалив одну и ту же часть информации во всех ячейках. Ниже мы обсудим два таких случая.
Удалите все до последнего пробела
Как и в предыдущем примере, регулярное выражение зависит от вашего понимания термина «пробел».
Это регулярное выражение будет соответствовать чему-либо до последнего пробела в строке (добавляются кавычки, чтобы сделать пробел после звездочки заметным).
Шаблон: «.* «
Чтобы получить все символы перед последним пробелом в тексте (включая пробел, табуляцию, возврат каретки и новую строку), используйте это регулярное выражение.
Шаблон: .*s
Особенно заметна разница на многострочных значениях.
Удалить все перед первым пробелом
Чтобы сопоставить что-либо до первого пробела в строке, вы можете использовать это регулярное выражение:
^[^] * +
С начала строки ^
мы сопоставляем ноль или несколько непробельных символов [^ ]*
, за которыми сразу же следует один или несколько пробелов +
. Последняя часть добавлена для предотвращения потенциальных пробелов в результатах.
Чтобы удалить текст перед первым пробелом в каждой строке, формула записывается в режиме «все совпадения» по умолчанию (аргумент instance_num опущен):
=RegExpReplace(A5; “^[^ ]* +”; «»)
Чтобы удалить текст перед первым пробелом в первой строке и оставить все остальные строки нетронутыми, аргумент instance_num устанавливается в 1:
=RegExpReplace(A5; “^[^ ]* +”; «»; 1)
Можно пометить шаблон в отдельную ячейку и зафиксировать ее абсолютной ссылкой, как это сделано на скриншоте ниже.
Регулярное выражение для удаления всего перед символом
Самый простой способ удалить весь текст перед определенным символом – использовать такое регулярное выражение:
Общий шаблон : ^[^символ]*символ
В переводе на человеческий язык это означает: «от начала текста, выбрать 0 или более символов, кроме указанного символа, до первого вхождения этого символа».
Например, чтобы удалить весь текст перед первым двоеточием, используйте это регулярное выражение:
^[^:]*:
Чтобы избежать пробелов в начале результатов, добавьте в конец пробел s*
. Это удалит все до первого двоеточия и обрежет все пробелы сразу после него:
^[^:]*:s*
=RegExpReplace(A5; “^[^:]*:s* ”; «»)
Регулярное выражение для удаления всего, кроме
Чтобы удалить все символы из строки, кроме тех, которые вы хотите сохранить, используйте классы символов с отрицанием.
Например, чтобы удалить все символы, кроме строчных букв и точек, регулярное выражение выглядит так:
[^a-zа-я.]+
Фактически, здесь можно было бы обойтись без квантификатора +
, поскольку наша функция заменяет все найденные совпадения. Квантификатор просто делает это немного быстрее – вместо обработки каждого отдельного символа вы заменяете подстроку.
=RegExpReplace(A5; «[^a-zа-я.]+»; «»)
Regex для удаления HTML-тегов в Excel
Прежде всего, следует отметить, что HTML не является обычным языком, поэтому его синтаксический анализ с использованием регулярных выражений – не самый лучший способ. Тем не менее, регулярные выражения определенно могут помочь удалить теги из ваших ячеек, чтобы сделать ваш набор данных более чистым.
Учитывая, что теги html всегда помещаются в угловые скобки <>, вы можете найти их, используя одно из следующих регулярных выражений.
Отрицательный класс:
Шаблон: <[^>]*>
Здесь мы сопоставляем открывающую угловую скобку, за которой следует ноль или более вхождений любого символа, кроме закрывающей угловой скобки [^>]*
, до ближайшей закрывающей угловой скобки.
Ленивый поиск:
<.*?>
Здесь мы сопоставляем все, от первой открывающей скобки до первой закрывающей скобки. Знак вопроса указывает искать как можно меньшее количество символов, пока не будет найдена закрывающая скобка.
Какой бы вариант вы бы ни выбрали, результат будет абсолютно одинаковым.
Например, чтобы удалить все теги html из строки в A5 и оставить текст, формула будет следующей:
=RegExpReplace(A5, «<.*?>», «»)
Это решение идеально подходит для однострочного текста (строки 5–9). Для нескольких строк (строки 10–12) результаты сомнительны — тексты из разных тегов сливаются в один. Это правильно или нет? Боюсь, это нелегко решить — все зависит от вашего понимания желаемого результата. Например, в B11 ожидается результат «A1»; в то время как в B10 вы можете захотеть, чтобы «значение1» и «значение2» были разделены пробелом.
Чтобы удалить теги html и разделить оставшийся текст пробелами, вы можете поступить следующим образом:
- Заменить теги пробелами » «, а не пустыми строками:
=RegExpReplace(A5, «<.*?>», » «)
- Сократить несколько пробелов до одного символа пробела:
=RegExpReplace(RegExpReplace(A10; «<[^>]*>»; » «); » +»; » «)
- Обрезать начальные и конечные пробелы:
=СЖПРОБЕЛЫ(RegExpReplace(RegExpReplace(A5; «<[^>]*>»; » «); » +»; » «))
Результат будет примерно таким:
В результате импортированный текст стал совершенно читаемым.
Инструмент удаления символов и текста Ablebits Regex
Если у вас была возможность использовать Ultimate Suite for Excel , вы, вероятно, уже обнаружили новые инструменты Regex, представленные в недавнем выпуске. Прелесть этих функций Regex на основе .NET заключается в том, что они, во-первых, поддерживают полнофункциональный синтаксис регулярных выражений, свободный от ограничений VBA RegExp, и, во-вторых, не требуют вставки какого-либо кода VBA в ваши книги, поскольку вся интеграция кода выполняется автоматически.
Ваша часть работы — создать регулярное выражение и передать его функции Позвольте мне показать вам, как это сделать, на практическом примере.
Как удалить текст в скобках с помощью регулярного выражения
В длинных текстовых строках менее важная информация часто заключена в [скобки] и (круглые скобки). Как удалить эти ненужные подробности, сохранив при этом все остальные данные?
Фактически, мы уже создали подобное регулярное выражение для удаления тегов html , то есть текста в угловых скобках. Очевидно, что те же методы будут работать и для квадратных и круглых скобок.
Шаблон: ((.*?))|([.*?])
Хитрость заключается в использовании ленивого квантификатора (*?) для поиска кратчайшей возможной подстроки. Первая группа ((.*?)) соответствует содержимому от открывающей круглой скобки до первой закрывающей скобки. Вторая группа ([.*?]) соответствует находящемуся от открывающей квадратной скобки до первой закрывающей скобки. Знак | действует как оператор ИЛИ.
Определив шаблон, давайте «скормим» его нашей функции Regex Remove. Вот каким образом:
- На вкладке «Ablebits Data» в группе «Text» щелкните «Regex Tools» .
- В появившейся слева панели выберите исходные ячейки с текстом, введите регулярное выражение, выберите параметр «Remove (Удалить)» и нажмите кнопку «Remove».
Чтобы получить результаты в виде формул, а не значений, установите флажок Insert as a formula (Вставить как формулу).
Чтобы удалить текст в скобках из строк в A2: A5, мы настраиваем следующие параметры, как на скриншоте ниже:
В результате функция AblebitsRegexRemove вставляется в новый столбец рядом с вашими исходными данными.
Функцию также можно ввести непосредственно в ячейку через стандартное диалоговое окно «Вставить функцию», где она отнесена к категории AblebitsUDFs .
Поскольку AblebitsRegexRemove предназначена для удаления текста, ей требуются только два аргумента — исходная строка и регулярное выражение. Оба параметра могут быть определены непосредственно в формуле или предоставлены в виде ссылок на ячейки. При необходимости эту настраиваемую функцию можно использовать вместе с любыми стандартными функциями Excel.
Например, чтобы обрезать лишние пробелы в результирующих строках, вы можете использовать функцию СЖПРОБЕЛЫ :
=СЖПРОБЕЛЫ(RegExpReplace(A5; $A$2; «»))
Вот как удалить текст в Excel с помощью регулярных выражений. Почти так же просто, как купить подписчиков в инстаграм. Благодарю вас за чтение!