Regex за отстранување на одредени знаци или текст во Excel

  • Споделете Го Ова
Michael Brown
аргументот е испуштен, сите пронајдени совпаѓања се отстранети. За да избришете одредено совпаѓање, дефинирајте го бројот на примерокот.

Во долунаведените низи, да претпоставиме дека сакате да го избришете бројот од првата нарачка. Сите такви броеви започнуваат со хаш знакот (#) и содржат точно 5 цифри. Значи, можеме да ги идентификуваме користејќи го овој регекс:

Шема : #\d{5}\b

Зборот граница \b одредува дека соодветната подниза не може да биде дел од поголема низа како што е #10000001.

За да се отстранат сите совпаѓања, аргументот instance_num не е дефиниран:

=RegExpReplace(A5, "#\d{5}\b", "")

За да се искорени само првата појава, го поставивме аргументот instance_num на 1:

=RegExpReplace(A5, "#\d{5}\b", "", 1)

Regex да отстраните одредени знаци

За да отстраните одредени знаци од низата, само запишете ги сите несакани знаци и одделете ги со вертикална лентасинтакса без ограничувања на VBA RegExp, и второ, не бара вметнување никаков VBA-код во вашите работни книги бидејќи целата интеграција на кодот ја правиме во задниот дел.

Вашиот дел од работата е да конструирате регуларен израз и послужете го на функцијата :) Дозволете ми да ви покажам како да го направите тоа на практичен пример.

Како да го отстраните текстот во загради и загради користејќи regex

Во долги текстуални низи, помалку важни информации често се става во [загради] и (загради). Како да ги отстраните тие ирелевантни детали задржувајќи ги сите други податоци?

Всушност, ние веќе изградивме сличен регекс за бришење на HTML ознаки, т.е. текст во аголни загради. Очигледно, истите методи ќе работат и за квадратни и тркалезни загради.

Шема : (\(.*?\))

Дали некогаш сте помислиле колку моќен би бил Excel ако некој може да ја збогати неговата кутија со алатки со регуларни изрази? Не само што размислувавме, туку работевме на тоа :) И сега, можете да ја додадете оваа прекрасна функција RegEx во вашите сопствени работни книги и да ги избришете поднизите што одговараат на шемата за кратко време!

Минатата недела, погледнавме како да се користат регуларни изрази за замена на низи во Excel. За ова, создадовме прилагодена функција Regex Replace. Како што се испостави, функцијата оди подалеку од нејзината примарна употреба и не само што може да ги замени низите туку и да ги отстрани. Како може да биде тоа? Во однос на Excel, отстранувањето на вредност не е ништо друго освен нејзино замена со празна низа, нешто во што нашата Regex функција е многу добра!

VBA RegExp функција за отстранување на поднизи во Excel

Како што сите знаеме, стандардните редовни изрази не се поддржани во Excel. За да ги овозможите, треба да креирате своја сопствена функција дефинирана од корисникот. Добрата вест е што таквата функција е веќе напишана, тестирана и подготвена за употреба. Сè што треба да направите е да го копирате овој код, да го залепите во уредникот на VBA, а потоа да ја зачувате вашата датотека како работна книга со овозможена макро (.xlsm).

Функцијата има следнава синтакса:

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

Првите три аргументи се потребни, последните два се опционални.

Каде:

  • Текст - текстуалната низа за пребарувањеможно додека не најде заграда за затворање.

Која шема и да ја изберете, резултатот ќе биде апсолутно ист.

На пример, да ги отстраните сите html ознаки од низа во А5 и да оставите текст, формулата е:

=RegExpReplace(A5, "]*>", "")

Или можете да го користите мрзливиот квантификатор како што е прикажано на сликата од екранот:

Ова решение функционира совршено за еден текст (редови 5 - 9). За повеќе текстови (редови 10 - 12), резултатите се сомнителни - текстовите од различни ознаки се споени во една. Дали е ова точно или не? Се плашам, тоа не е нешто што може лесно да се реши - сè зависи од вашето разбирање за посакуваниот исход. На пример, во Б11, резултатот „А1“ се очекува; додека во B10, можеби ќе сакате „податоци1“ и „податоци2“ да се одделат со празно место.

За да ги отстраните HTML ознаките и да ги одделите преостанатите текстови со празни места, можете да продолжите на овој начин:

<0 30>
  • Заменете ги ознаките со празни места " ", не празни низи:

    =RegExpReplace(A5, "]*>", " ")

  • Намалете повеќе празни места на еден знак празно место:

    =RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")

  • Скратете ги водечките и задоцнетите простори:

    =TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))

  • Резултатот ќе изгледа отприлика вака:

    Алатката за отстранување на Abblebits Regex

    Ако сте имале шанса да го користите нашиот Ultimate Suite за Excel, веројатно веќе сте ги откриле новите алатки Regex воведени со неодамнешното издание. Убавината на овие функции на Regex базирани на .NET е што тие, прво, поддржуваат регуларен израз со целосни карактеристикиопцијата Отстрани и притиснете Отстрани .

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

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

    Како резултат на тоа, функцијата AblebitsRegexRemove е вметната во нова колона веднаш до вашите оригинални податоци.

    Функцијата може да се внесе и директно во ќелија преку стандардниот дијалог прозорец Вметни функција , каде што е категоризирана под AblebitsUDFs .

    Бидејќи AblebitsRegexRemove е дизајниран да отстранува текст, бара само два аргументи - изворната низа и регекс. Двата параметри може да се дефинираат директно во формула или да се обезбедат во форма на референци за ќелии. Доколку е потребно, оваа приспособена функција може да се користи заедно со која било оригинална.

    На пример, за да ги намалите дополнителните празни места во добиените низи, можете да ја користите функцијата TRIM како обвивка:

    =TRIM(AblebitsRegexRemove(A5, $A$2))

    Така да се отстранат низите во Excel користејќи редовни изрази. Ви благодарам што прочитавте и со нетрпение очекувам да се видиме на нашиот блог следната недела!

    Достапни преземања

    Отстранете ги низите користејќи regex - примери (датотека .xlsm)

    Ultimate Suite - пробна верзија (датотека .exe)

    во.
  • Шама - редовниот израз за пребарување.
  • Замена - текстот со кој треба да се замени. За отстранување на поднизите што одговараат на шаблонот, користете празна низа ("") за замена.
  • Instance_num (изборно) - примерот за замени. Ако се испушти, сите пронајдени совпаѓања се заменуваат (стандардно).
  • Match_case (изборно) - Булова вредност што покажува дали да се совпаѓа или да се игнорира буквите на текстот. За совпаѓање чувствително на букви, користете TRUE (стандардно); за мали букви - FALSE.
  • За повеќе информации, погледнете ја функцијата RegExpReplace.

    Совет. Во едноставни случаи, можете да отстраните одредени знаци или зборови од ќелиите со формули на Excel. Но, регуларните изрази обезбедуваат многу повеќе опции за ова.

    Како да отстраните низи користејќи регуларни изрази - примери

    Како што споменавме погоре, за да отстраните делови од текстот што одговараат на шема, треба да ги замените со празен стринг. Значи, генеричката формула ја има оваа форма:

    RegExpReplace(текст, шема, "", [instance_num], [match_case])

    Подолу примерите покажуваат различни имплементации на овој основен концепт.

    Отстрани сите совпаѓања или специфично совпаѓање

    Функцијата RegExpReplace е дизајнирана да ги пронајде сите поднизи што одговараат на даден регекс. Кои појави да се отстранат се контролираат со 4-от изборен аргумент, наречен instance_num .

    Стандардното е „сите се совпаѓаат“ - кога instance_num оператор за конкатенација (&) и функции за текст како што се RIGHT, MID и LEFT.

    На пример, за да ги запишете сите телефонски броеви во форматот (123) 456-7890, формулата е:

    ="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)

    Каде што B5 е излезот од функцијата RegExpReplace.

    Отстранете специјални знаци користејќи regex

    Во едно од нашите упатства, разгледавме како да ги отстраниме несаканите знаци во Excel користејќи вградени и сопствени функции. Редовните изрази ги прават работите многу полесни! Наместо да ги наведете сите знаци што треба да се избришат, само наведете ги оние што сакате да ги задржите :)

    Шемата се заснова на негирани класи на знаци - се става карета во класа на знаци [^ ] да одговара на кој било знак НЕ во загради. Квантификаторот + го принудува да ги смета последователните знаци како единечно совпаѓање, така што се врши замена за соодветна подниза наместо за секој поединечен знак.

    Во зависност од вашите потреби, изберете еден од следните регекси.

    За отстранување на неалфанумерички знаци, т.е. сите знаци освен буквите и цифрите:

    Шема : [^0-9a-zA-Z] +

    За да ги исчистите сите знаци освен буквите , цифрите и празнините :

    Шемата : [^0-9a-zA-Z ]+

    За да ги избришете сите знаци освен буквите , цифрите и подвлекувањето , можете да користите \ W што значи кој било знак што НЕ е алфанумерички знак илидолна црта:

    Шема : \W+

    Ако сакате да зачувате некои други знаци , на пр. интерпункциски знаци, ставете ги во заградите.

    На пример, за да отстраните кој било знак освен буква, цифра, точка, запирка или празно место, користете го следниов регекс:

    Шара : [^0-9a-zA-Z\., ]+

    Ова успешно ги елиминира сите специјални знаци, но останува дополнително празно место.

    За да го поправите ова, можете да ја вгнездите горенаведената функција во друга која заменува повеќе празни места со еден знак празно место.

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

    Или само користете ја функцијата народна TRIM со истиот ефект :

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

    Regex за отстранување ненумерички знаци

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

    Соклопете кој било знак што НЕ е цифра:

    Шема : \D+

    Отстранете ги ненумеричките знаци користејќи негирани класи:

    Шема : [^0-9]+

    Шема : [^\d] +

    Совет. Ако вашата цел е да го отстраните текстот и да ги истурите преостанатите броеви во посебни ќелии или да ги ставите сите во една ќелија одвоена со одреден разграничувач, тогаш користете ја функцијата RegExpExtract како што е објаснето во Како да се извлечат броеви од низа користејќи регуларни изрази.

    Regex за да отстраните сè по празно место

    За да избришете сè по празно место, користете или празно место ( ) илипразно место (\s) знак за да се најде првиот простор и .* за да се совпаднат сите знаци по него.

    Ако имате низи со една линија што содржат само нормални празни места (вредност 32 во 7-битниот ASCII систем) , навистина не е важно кој од долунаведените регекси го користите. Во случај на низи со повеќе линии, тоа навистина прави разлика.

    За да отстраните сè по празно место , користете го овој регекс:

    Шема : " .*"

    =RegExpReplace(A5, " .*", "")

    Оваа формула ќе одземе што било по првото празно место во секој ред . За резултатите да се прикажат правилно, погрижете се да го вклучите Wrap Text.

    За да отстраните сè по празно место (вклучувајќи празно место, јазиче, враќање на превозот и нова линија), регексот е:

    Шема : \s.*

    =RegExpReplace(A5, "\s.*", "")

    Бидејќи \s се совпаѓа со неколку различни типови празни места вклучувајќи нова линија (\n), оваа формула брише сè по првото празно место во ќелијата, без разлика колку линии има во неа.

    Regex за да се отстрани текстот по одредено карактер

    Користејќи ги методите од претходниот пример, можете да го искорените текстот по кој било знак што ќе го наведете.

    За да се справите со секоја линија посебно:

    Генеричка шема : char.*

    Во низи со една линија, ова ќе отстрани сè по char . Во стринговите со повеќе линии, секоја линија ќе се обработува поединечно бидејќи во вкусот на VBA Regex, точка (.) одговара на кој било знак освен новпочеток на низа ^, одговараме нула или повеќе знаци што не се празно [^ ]* кои се веднаш проследени со едно или повеќе празни места „ +“. Последниот дел е додаден за да се спречат потенцијалните водечки празни места во резултатите.

    За да се отстрани текстот пред првото празно место во секоја линија, формулата е напишана во стандардниот режим „сите совпаѓања“ ( instance_num испуштен):

    =RegExpReplace(A5, "^[^ ]* +", "")

    За да го избришете текстот пред првото празно место во првата линија и да ги оставите сите други линии недопрени, аргументот instance_num е поставен на 1:

    =RegExpReplace(A5, "^[^ ]* +", "", 1)

    вака:

    Генеричка шема : ^[^char]*char

    Преведено на човечки јазик, вели: „од почетокот на низата закотвена од ^ , одговара на 0 или повеќе знаци освен char [^char]* до првата појава на char .

    На пример, да го избришете целиот текст пред првата две точки , користете го овој редовен израз:

    Шама : ^[^:]*:

    За да избегнете водечки празни места во резултатите, додадете празно место \s* во крај. Ова ќе отстрани сè g пред првата две точки и скратете ги празнините веднаш по неа:

    Шема : ^[^:]*:\s*

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

    Совет. Покрај редовните изрази, Excel има свои средства за отстранување на текст по позиција или поклопување. За да научите како да ја постигнете задачата со природни формули,ве молиме погледнете Како да се отстрани текстот пред или по знак во Excel.

    Regex за да отстраните сè освен

    За да ги отстраните сите знаци од низата освен оние што сакате да ги задржите, користете негирани класи на знаци.

    На пример, за да ги отстраните сите знаци освен малите букви и точки, регексот е:

    Шема : [^a-z\.]+

    Всушност, тука би можеле да направиме без квантификаторот + бидејќи нашата функција ги заменува сите пронајдени совпаѓања. Квантификаторот само го прави малку побрз - наместо да ракува со секој поединечен знак, заменувате подниза.

    =RegExpReplace(A5, "[^a-z\.]+", "")

    Regex за отстранување на html ознаките во Excel

    Прво, треба да се забележи дека HTML не е редовен јазик, така што неговото парсирање со користење на регуларни изрази не е најдобриот начин. Сепак, регексите дефинитивно можат да помогнат да се отстранат ознаките од вашите ќелии за да се направи почиста вашата база на податоци.

    Со оглед на тоа што html ознаките секогаш се ставаат во аголни загради , можете да ги најдете користејќи еден од следните регекси.

    Негирана класа:

    Шама : ]*>

    Овде, одговараме на аголна заграда за отворање, проследена со нула или повеќе појави на кој било знак освен аголна заграда за затворање [^>]* до најблиската аголна заграда за затворање.

    Мрзливо пребарување:

    Шема :

    Еве, се совпаѓаме било што од првиот држач за отворање до првиот држач за затворање. Прашалникот го принудува .* да одговара на што помалку знацилинија.

    За обработка на сите линии како една низа:

    Генеричка шема : char(.

    Мајкл Браун е посветен технолошки ентузијаст со страст за поедноставување на сложените процеси користејќи софтверски алатки. Со повеќе од една деценија искуство во технолошката индустрија, тој ги усоврши своите вештини во Microsoft Excel и Outlook, како и Google Sheets и Docs. Блогот на Мајкл е посветен на споделување на своето знаење и експертиза со другите, обезбедувајќи лесни за следење совети и упатства за подобрување на продуктивноста и ефикасноста. Без разлика дали сте искусен професионалец или почетник, блогот на Мајкл нуди вредни сознанија и практични совети за да го извлечете максимумот од овие основни софтверски алатки.