Премахване на бели интервали и празни редове в Excel с помощта на Regex

  • Споделя Това
Michael Brown

Искате да се справите с белите полета по най-ефективния начин? Използвайте регулярни изрази, за да премахнете всички полета в клетка, да замените няколко полета с един символ, да изрежете полета само между числата и др.

Каквито и входни данни да използвате, едва ли ще срещнете набор от данни без интервали. В повечето случаи белите полета са полезни - използвате ги, за да отделите визуално различни части от информацията и да я направите по-лесна за възприемане. В някои ситуации обаче те могат да се превърнат в зло - допълнителните интервали могат да объркат формулите ви и да направят работните ви листове почти неуправляеми.

    Защо да използвате регулярен израз за изрязване на белите полета в Excel?

    Преди да навлезем в детайлите на използването на регулярни изрази за премахване на бели полета в работните листове на Excel, бих искал да отговоря на въпроса, който ни идва наум на първо място - защо ни трябват регулярни изрази, след като Excel вече разполага с функцията TRIM?

    За да разберем разликата, нека видим какво се счита за бяло пространство във всеки от случаите:

    • Вградената функция TRIM може да премахне само символът интервал който има стойност 32 в 7-битовата система ASCII.
    • Регулярните изрази могат да идентифицират няколко различни форми на бели полета, като например интервал ( ), табулация (\t), връщане на карета (\r) и нов ред (\n). символ за бял интервал (\s), който съответства на всички тези типове и е изключително полезен за почистване на необработени входни данни.

    Ако знаете какво точно се случва зад кулисите, е много по-лесно да намерите решение, нали?

    Как да разрешите използването на регулярни изрази в Excel

    Добре известен факт е, че готовата версия на Excel не поддържа регулярни изрази. За да ги активирате, трябва да създадете потребителска функция VBA. За щастие вече имаме такава, наречена RegExpReplace Чакайте, защо "replace", докато говорим за премахване? В езика на Excel "remove" е просто друга дума за "replace with an empty string" (замени с празен низ) :)

    За да добавите функцията в Excel, просто копирайте кода й от тази страница, поставете го в редактора VBA и запазете файла като работна книга с активирани макроси (.xlsm).

    Ето синтаксиса на функцията за справка:

    RegExpReplace(текст, шаблон, замяна, [instance_num], [match_case])

    Първите три аргумента са задължителни, а последните два са незадължителни.

    Къде:

    • Текст - оригиналния низ, в който се търси.
    • Модел - регекса за търсене.
    • Смяна на - текстът, с който да се замени. Към премахване на бели полета , трябва да зададете този аргумент на:
      • празен низ (""), за да изрежете абсолютно всички интервали
      • пространство символ (" "), за да замените няколко интервала с един символ за интервал
    • Instance_num (по избор) - номерът на инстанцията. В повечето случаи ще го пропуснете, за да замените всички инстанции (по подразбиране).
    • Match_case (незадължително) - булева стойност, указваща дали да се съпоставят (TRUE) или игнорират (FALSE) регистрите на текста. За белите полета тя не е от значение и затова се пропуска.

    За повече информация вижте функцията RegExpReplace.

    Как да премахваме бели символи с regex - примери

    След като функцията RegExpReplace е добавена в работната ви книга, нека разгледаме различни сценарии един по един.

    Премахване на всички бели полета с помощта на regex

    За да премахнете всички интервали в даден низ, просто потърсете всеки бял символ, включително интервал, табулатор, връщане на карета и подаване на ред, и ги заменете с празен низ ("").

    Модел : \s+

    Смяна на : ""

    Ако приемем, че изходният низ е в A5, формулата в B5 е:

    =RegExpReplace(A5, "\s+", "")

    За да улесните управлението на шаблоните, можете да въведете регекса в предварително определена клетка и да го предоставите на формулата, като използвате абсолютна препратка, например $A$2, така че адресът на клетката да остане непроменен при копиране на формулата надолу по колоната.

    =RegExpReplace(A5, $A$2, "")

    Премахване на повече от един бял интервал

    За да премахнете допълнителни бели полета (т.е. повече от един последователен интервал), използвайте същия регекс \s+, но заменете намерените съвпадения с един символ интервал.

    Модел : \s+

    Смяна на : " "

    =RegExpReplace(A5, "\s+", " ")

    Обърнете внимание, че тази формула запазва по един символ интервал не само между думите, но и в началото и края на низ, което не е добре. За да се отървете от водещите и завършващите бели символи, вложете горната формула в друга функция RegExpReplace, която премахва интервалите от началото и края:

    =RegExpReplace(RegExpReplace(A5, "\s+", " "), "^[\s]+

    Регекс за премахване на начален и краен бял интервал

    За да търсите бели символи в началото или в края на реда, използвайте котвите за начало ^ и край $.

    Водещ бели полета:

    Модел : ^[\s]+

    Следващият бели полета:

    Модел : [\s]+$

    Водещ и завършващ бели полета:

    Модел : ^[\s]+

    Който и регекс да изберете, заменете съвпаденията с нищо.

    Смяна на : ""

    Например, за да премахнете всички интервали в началото и в края на низ в A5, формулата е:

    =RegExpReplace(A5, "^[\s]+

    Както е показано на снимката на екрана по-долу, по този начин се премахват само началните и крайните бели полета. Пространствата между думите остават непокътнати, което създава визуално приятен изглед за окото на читателя.

    Премахване на допълнителни бели полета, но запазване на прекъсванията на редовете

    Когато работите с многоредови низове, може да пожелаете да се отървете от допълнителните интервали, но да запазите прекъсванията на редовете. За да направите това, вместо символа за бял интервал \s, търсете интервали [ ] или интервали и табулации [\t ]. Последният модел е полезен, когато изходните данни са импортирани от друг източник, например от текстов редактор.

    Предположете, че в набора от данни по-долу искате да изрежете всички водещи/назадстоящи интервали и всички интервали между тях с изключение на един, като запазите няколко реда непокътнати. За да изпълните задачата, ще ви трябват две различни функции RegExpReplace.

    Първата функция замества множество интервали с един символ интервал.

    =RegExpReplace(A5, " +", " ")

    Другият премахва интервалите от началото и края на реда:

    =RegExpReplace(A5, "^ +

    Просто вложете двете функции една в друга:

    =RegExpReplace(RegExpReplace(A5, " +", " "), "^ +

    И ще получите перфектен резултат:

    Регекс за замяна на няколко интервала с един символ

    В случай че искате да премахнете всички интервали от даден низ и да замените всяка група последователни интервали с определен символ, трябва да направите това:

    Първо, използвайте този регекс, за да изрежете началните и крайните бели интервали:

    =RegExpReplace(A8, "^[\s]+

    След това подайте горната функция на текст аргумент на друг RegExpReplace, който замества един или повече последователни бели интервали с посочения от вас символ, напр. тире:

    Модел : \s+

    Смяна на : -

    Ако приемем, че изходният низ е в A8, формулата придобива следната форма:

    =RegExpReplace(RegExpReplace(A8, "^[\s]+

    Или можете да въведете моделите и заместванията в отделни клетки, както е показано на снимката:

    Регекс за премахване на празни редове

    Ето един въпрос, който потребителите, които имат много редове в една клетка, често задават: "В клетките ми има много празни редове. Има ли друг начин да се отърва от тях, освен да минавам през всяка клетка и да изтривам всеки ред ръчно?" Отговорът: Това е лесно!

    За съвпадение с празни редове, които нямат нито един символ от началото ^ на текущия ред до следващия ред \n, регексът е:

    Модел : ^\n

    Ако визуално празните редове съдържат интервали или табулатори, използвайте този регулярен израз:

    Модел : ^[\t ]*\n

    Просто заменете регекса с празен низ, като използвате тази формула, и всички празни редове ще изчезнат наведнъж!

    =RegExpReplace(A5, $A$2, "")

    Премахване на бели полета с инструментите RegEx

    Горните примери демонстрираха само малка част от чудесните възможности, които предоставят регулярните изрази. За съжаление не всички функции на класическите регулярни изрази са достъпни във VBA.

    За щастие инструментите RegEx, включени в нашия Ultimate Suite, са свободни от тези ограничения, тъй като се обработват от двигателя .NET RegEx на Microsoft. Това ви позволява да конструирате по-сложни шаблони, които не се поддържат от VBA RegExp. По-долу ще намерите пример за такъв регулярен израз.

    Regex за премахване на интервала между числата

    Представете си, че в буквено-цифров низ искате да премахнете белите интервали само между числата, така че низ като "A 1 2 B" да стане "A 12 B".

    За да съответствате на бял интервал между две цифри, можете да използвате следните обходни пътища:

    Модел : (?<=\d)\s+(?=\d)

    За да създадете формула въз основа на горните регекси, ето две лесни стъпки:

    1. На Данни от Ablebits в раздела Текст група, щракнете върху Инструменти за регекс .

    2. На Инструменти за регекс изберете изходните данни, въведете регекса, изберете Премахване на и натиснете Премахване на .

      За да получите резултатите като формули, а не като стойности, не забравяйте да поставите отметка в полето Вмъкване като формула квадратчето за отметка.

    След малко ще видите AblebitsRegexRemove вмъкната в нова колона вдясно от оригиналните данни.

    Можете също така да въведете регекса в някоя клетка, например A5, и да вмъкнете формулата директно в клетка с помощта на Функция за вмъкване диалогов прозорец, където AblebitsRegexRemove е категоризиран под AblebitsUDFs .

    Тъй като тази функция е специално разработена за премахване на низове, тя се нуждае само от два аргумента - входния низ и regex:

    =AblebitsRegexRemove(A5, $A$2)

    Това е начинът за премахване на интервалите в Excel с помощта на регулярни изрази. Благодаря ви, че прочетохте, и с нетърпение очаквам да ви видя в нашия блог следващата седмица!

    Налични изтегляния

    Премахване на бели символи с regex - примери (.xlsm файл)

    Ultimate Suite - пробна версия (.exe файл)

    Майкъл Браун е отдаден технологичен ентусиаст със страст към опростяване на сложни процеси с помощта на софтуерни инструменти. С повече от десетилетие опит в технологичната индустрия, той е усъвършенствал уменията си в Microsoft Excel и Outlook, както и в Google Sheets и Docs. Блогът на Майкъл е посветен на споделянето на неговите знания и опит с други, предоставяйки лесни за следване съвети и уроци за подобряване на продуктивността и ефективността. Независимо дали сте опитен професионалист или начинаещ, блогът на Michael предлага ценни прозрения и практически съвети за извличане на максимума от тези основни софтуерни инструменти.