Екцел Регек: упарите стрингове користећи регуларне изразе

  • Деле Ово
Michael Brown

У овом водичу ћемо детаљно погледати како да користите регуларни израз за подударање стрингова у Екцел-у.

Када треба да пронађете одређену вредност у опсегу ћелија, користили бисте функцију МАТЦХ или КСМАТЦХ. Када тражите одређени низ у ћелији, функције ФИНД и СЕАРЦХ су корисне. А како знате да ли ћелија садржи информације које одговарају датом обрасцу? Очигледно, коришћењем регуларних израза. Али из кутије Екцел не подржава регуларне изразе! Без бриге, натераћемо је да :)

    Екцел ВБА Регек функција за подударање стрингова

    Као што је прилично јасно из наслова, да би се користили регуларни изрази у Екцел-у, потребно је да креирате сопствену функцију. Срећом, Екцел-ов ВБА има уграђени објекат РегЕкп , који можете користити у свом коду као што је приказано испод:

    Јавна функција РегЕкпМатцх(инпут_ранге Ас Ранге, паттерн Ас Стринг, Оптионал матцх_цасе Ас Боолеан = Труе) Ас Вариант Дим арРес() Ас Вариант 'низ за чување резултата Дим иИнпутЦурРов, иИнпутЦурЦол, цнтИнпутРовс, цнтИнпутЦолс Ас Лонг 'индекс тренутног реда у изворном опсегу, индекс тренутне колоне у изворном опсегу, број редова, број колоне Он Еррор ГоТо ЕррХандл РегЕкпМатцх = арРес Сет регек = ЦреатеОбјецт ( "ВБСцрипт.РегЕкп") регек.паттерн = паттерн регек.Глобал = Тачно регек.МултиЛине = Тачно Ако је Труе = матцх_цасе Онда регек.игноресе Рек = Фкалсе Елоресе. Крајизрази.

    Образац : \б[\в\.\-]+@[А-За-з0-9]+[А-За-з0-9\.\- ]*[А-За-з0-9]+\.[А-За-з]{2,24}\б

    Да бисмо боље разумели шта се овде дешава, погледајмо детаљније сваки део. :

    • Корисничко име може да садржи слова, бројеве, доње црте, тачке и цртице. Имајући на уму да се \в подудара са било којим словом, цифром или доњом цртом, добијамо следећи регуларни израз: [\в\.\-]+
    • Име домена може да садржи велика и мала слова, цифре, цртице (али не на првој или последњој позицији) и тачке (у случају поддомена). Пошто доње црте нису дозвољене, уместо \в користимо 3 различита скупа знакова: [А-За-з0-9]+[А-За-з0-9\.\-]*[А-За-з0-9 ]+
    • Домен највишег нивоа се састоји од тачке иза које следе велика и мала слова. Може да садржи од 2 до 24 слова (најдужи ТЛД који тренутно постоји): \.[А-За-з]{2,24}

    Напомена. Образац претпоставља да име домена садржи 2 или више алфанумеричких знакова.

    Са оригиналним текстом у А5 и шаблоном у А5, формула поприма овај облик:

    =RegExpMatch(A5, $A$2)

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

    Образац : \б[\в\.\-]+@[а-з0-9]+[а- з0-9\.\-]*[а-з0-9]+\.[а-з]{2,24}\б

    Али нека ваша формула не разликује велика и мала слова:

    =RegExpMatch(A5, $A$2, FALSE)

    Екцел ИФ формула са одговарајућим регуларним изразом

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

    Да бисте вратили или израчунали нешто ако се подудари регуларни израз и нешто друго ако се не подудара, уградите прилагођени РегЕкпМатцх функција у логичком тексту ИФ:

    ИФ(РегЕкпМатцх(…), [валуе_иф_труе], [валуе_иф_фалсе])

    На пример, ако стринг у А5 садржи исправну адресу е-поште, можете вратити „Да“; у супротном „Не“.

    =IF(RegExpMatch(A5, $A$2,), "Yes", "No")

    Рачунај ако се подудара са регуларним изразом

    Пошто изворне Екцел функције не подржавају регуларне изразе, то је није могуће ставити регуларни израз директно у функцију ЦОУНТИС или ЦОУНТИФС. Срећом, ову функцију можете емулирати помоћу наше прилагођене функције.

    Претпоставимо да сте користили регек за подударање бројева телефона и резултате приказали у колони Б. Да бисте сазнали колико ћелија садржи бројеве телефона, потребно вам је само да пребројите ТРУЕ вредности у Б5:Б9. А то се лако може урадити помоћу стандардне формуле ЦОУНТИФ:

    =COUNTIF(B5:B9, TRUE)

    Не желите додатне колоне у свом радном листу? Нема проблема. Имајући на уму да наша прилагођена функција може да обрађује више ћелија истовремено и да Екцел-ов СУМ може да сабере вредности у низу, ево шта треба да урадите:

    • Наведите референцу опсега за РегЕкпМатцх, тако да враћа низ ТРУЕ и ФАЛСЕ вредности.
    • Користите двоструку негацију (--) да бисте принудили логичке вредности на јединице инуле.
    • Набавите функцију СУМ да бисте сабрали 1 и 0 у резултирајућем низу.

    =SUM(--RegExpMatch(A5:A9, $A$2))

    Подударање регуларног израза са Ултимате Суите

    Корисници нашег Ултимате Суите-а могу да искористе четири моћне Регек функције без додавања ВБА кода у своје радне свеске јер су глатко интегрисани у Екцел током инсталације додатка. Наше прилагођене функције се обрађују стандардним .НЕТ РегЕк механизмом и подржавају класичне регуларне изразе са пуним могућностима.

    Како користити прилагођену функцију РегекМатцх

    Под претпоставком да имате инсталирану најновију верзију Ултимате Суите ( 2021.4 или новији), можете да креирате формулу подударања регуларног израза у два једноставна корака:

    1. На картици Аблебитс Дата , у групи Тект кликните на Регек Тоолс .

  • У окну Регек Тоолс урадите следеће:
    • Селецт изворне стрингове.
    • Унесите свој образац.
    • Изаберите опцију Матцх .
    • Да бисте имали резултате као формуле, а не вредности, изаберите Уметни као формулу поље за потврду.
    • Кликните на дугме Матцх .

    Тренутак касније, функција АблебитсРегекМатцх је уметнута у нову колону десно од ваших података.

    На снимку екрана испод, функција проверава да ли низови у колони А садрже 7 цифара бројеви или не.

    Савети:

    • Функција ција се може уметнути директно у ћелију преко стандардног Инсерт Фунцтион оквира за дијалог, где је категорисан под АблебитсУДФс .
    • Подразумевано, регуларни израз се додаје формули, али такође можете да задржите то у посебној ћелији. За ово, само користите референцу ћелије за 2. аргумент.
    • Подразумевано, функција је осетљива на велика и мала слова . За подударање без обзира на велика и мала слова, користите образац (?и).

    За више информација погледајте функцију АблебитсРегекМатцх.

    Тако се врши подударање регуларних израза у Екцел-у. Захваљујем вам на читању и радујем се што ћу вас видети на нашем блогу следеће недеље!

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

    Екцел Регек Матцх примери (.клсм датотека)

    Ултимате Суите 14- дневна потпуно функционална верзија (.еке датотека)

    Ако је цнтИнпутРовс = инпут_ранге.Ровс.Цоунт цнтИнпутЦолс = инпут_ранге.Цолумнс.Цоунт РеДим арРес(1 То цнтИнпутРовс, 1 То цнтИнпутЦолс) За иИнпутЦурРов = 1 То цнтИнпутРовс За иИнпутЦурЦолс = 1 То цнтИнпутРовс За иИнпутЦурЦол = 1 То цнтИнпутЦолс = 1 То цнтИнпутРовс = 1 То цнтИнпутРовс(ЦнтИнпутЦолс) реДим арРес (ЦнтИнпутЦолс,ЦнтИнпутР) .Целлс(иИнпутЦурРов, иИнпутЦурЦол).Валуе) Следеће Следеће РегЕкпМатцх = арРес Излазна функција ЕррХандл: РегЕкпМатцх = ЦВЕРр(клЕррВалуе) Енд Фунцтион

    Налепите код у ВБА едитор, а ваша нова 2РегЕкп функција је Матцх спреман за употребу. Ако немате много искуства са ВБА, овај водич може бити од помоћи: Како уметнути ВБА код у Екцел.

    Напомена. Након уметања кода, не заборавите да сачувате датотеку као радну свеску са омогућеним макроима (.клсм).

    РегЕкпМатцх синтакса

    Функција РегЕкпМатцх проверава да ли се било који део изворног стринга подудара са регуларним изразом. Резултат је логичка вредност: ТРУЕ ако је пронађено најмање једно подударање, у супротном ФАЛСЕ.

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

    РегЕкпМатцх(тект , образац, [матцх_цасе])

    Где:

    • Текст (обавезно) - један или више стрингова за претрагу. Може се доставити као референца ћелије или опсега.
    • Узорак (обавезно) - регуларни израз за подударање. Када се постави директно у формулу, образац мора бити стављен у двоструке наводнике.
    • Матцх_цасе (опционо) - дефинише подударањетип. Ако је ТРУЕ или изостављено (подразумевано), врши се подударање осетљиво на велика и мала слова; ако је ФАЛСЕ - не разликује велика и мала слова.

    Функција ради у свим верзијама програма Екцел 365, Екцел 2021, Екцел 2019, Екцел 2016, Екцел 2013 и Екцел 2010.

    3 ствари које треба да знате о РегЕкпМатцх

    Пре него што пређемо на практичне прорачуне, обратите пажњу на следеће тачке које појашњавају неке техничке детаље:

    1. Функција може да обради једну ћелију или опсег ћелија . У последњем случају, резултати се враћају у суседне ћелије у облику динамичког низа или опсега преливања, као што је приказано у овом примеру.
    2. Подразумевано, функција је осетљива на велика и мала слова . Да бисте игнорисали велика и мала слова, поставите аргумент матцх_цасе на ФАЛСЕ. Због ограничења ВБА Регекп-а, образац који не разликује велика и мала слова (?и) није подржан.
    3. Ако ваљани образац није пронађен, функција враћа ФАЛСЕ; ако је образац неважећи , #ВАЛУЕ! јавља се грешка.

    У наставку ћете наћи неколико примера подударања регуларних израза који су направљени у сврху демонстрације. Не можемо гарантовати да ће наши обрасци радити беспрекорно са ширим опсегом улазних података у вашим стварним радним листовима. Пре пуштања у производњу, обавезно тестирајте и прилагодите наше узорке шаблона у складу са вашим потребама.

    Како користити регек за подударање стрингова у Екцел-у

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

    Претпоставимо да имате низ ћелија (А5:А9) које садрже различите детаље о неким ставкама. Желите да знате које ћелије имају СКУ-ове. Под претпоставком да се сваки СКУ састоји од 2 велика слова, цртице и 3 цифре, можете их упарити користећи следећи израз.

    Образац : \б[А-З]{2}-\ д{3}\б

    Где [А-З]{2} означава било која 2 велика слова од А до З, а \д{3} значи било које 3 цифре од 0 до 9. Знак \б означава реч граница, што значи да је СКУ засебна реч, а не део већег низа као што је 23-МАР-2022.

    Када је образац успостављен, можемо да пређемо на писање формуле. У суштини, коришћење прилагођене функције се не разликује од изворне. Чим почнете да куцате формулу, име функције ће се појавити на листи коју је предложио Екцел-ов АутоЦомплете. Међутим, постоји неколико нијанси у Динамиц Арраи Екцел-у (Мицрософт 365 и Екцел 2021) и традиционалном Екцел-у (2019 и старије верзије).

    Упари стринг у једној ћелији

    За подударање стринга у једној ћелији, реферирајте се на ту ћелију у првом аргументу. Други аргумент би требало да садржи регуларни израз.

    =RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")

    Образац се такође може задржати у унапред дефинисаној ћелији, која је закључана апсолутном референцом ($А$2):

    =RegExpMatch(A5, $A$2)

    Након што унесете формулу у прву ћелију, можете је превући надоле у ​​све остале редове.

    Овај методради прелепо у свим верзијама Екцел-а .

    Упарите низове у више ћелија одједном

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

    =RegExpMatch(A5:A9, "\b[A-Z]{2}-\d{3}\b")

    У Екцел 365 и Екцел 2021 који подржавају динамичке низове, функционише на овај начин - укуцате формулу у прву ћелију, притиснете Ентер и формула се аутоматски прелива у ћелије испод.

    У Екцел 2019 и раније, то функционише само као традиционална формула ЦСЕ низа, која се уноси у опсег ћелија и завршава заједничким притиском на тастере Цтрл + Схифт + Ентер.

    Регекс за подударање броја

    Да бисте подударили било коју појединачну цифру од 0 до 9, користите знак у редовном изразу. У зависности од вашег конкретног задатка, додајте одговарајући квантификатор или направите сложенији образац.

    Регекс за подударање са било којим бројем

    Да бисте се подударали са било којим бројем било које дужине, ставите квантификатор + одмах после / д знак, који каже да се траже бројеви који садрже 1 или више цифара.

    Образац : \д+

    =RegExpMatch(A5:A9, "\d+")

    Регекс за подударање броја одређене дужине

    Ако је ваш циљ да ускладите нумеричке вредности које садрже одређени број цифара, онда користите \д заједно са одговарајућим квантификатором.

    На пример, да бисте упарили бројеве фактура који се састоје од тачно 7 цифара, користите \д{7}. Међутим, имајте на уму да ће се подударати са 7као што се очекивало:

    Напомене:

    • Међународни кодови се не проверавају, тако да могу или не морају бити присутни.
    • У регуларним изразима, \с означава било који знак размака као што је размак, табулатор, повратак на слово или нови ред. Да бисте дозволили само размаке, користите [-\. ] уместо [-\.\с].
    • Регекс да се НЕ подудара са карактером

      Да бисте пронашли низове који НЕ садрже одређени карактер, можете користити негиране класе знакова [^ ] које се подударају било шта НЕ у заградама. На пример:

      • [^13] ће одговарати било ком појединачном знаку који није 1 или 3.
      • [^1-3] ће одговарати било ком појединачном знаку који није 1, 2 или 3 (тј. било која цифра од 1 до 3).

      У листи телефонских бројева, претпоставимо да желите да пронађете оне који немају позивни број земље. Имајући на уму да сваки међународни код укључује знак +, можете користити класу знакова [^\+] да бисте пронашли низове који не садрже знак плус. Важно је схватити да горњи израз одговара сваком појединачном знаку који није +. Пошто број телефона може бити било где у низу, не нужно на самом почетку, квантификатор * се додаје да би се проверио сваки следећи знак. Почетак ^ и крај $ сидра обезбеђују да се цео стринг обради. Као резултат, добијамо доњи регуларни израз који каже „не одговара знаку + ни на једној позицији у стрингу“.

      Образац :^[^\+]*$

      =RegExpMatch(A5, "^[^\+]*$")

      Регекс да НЕ одговара стрингу

      Иако не постоји посебна синтакса регуларног израза за који се не подударају са одређеним стрингом, можете емулирати ово понашање коришћењем негативног погледа унапред.

      Претпоставимо да желите да пронађете стрингове који не садрже реч "лимони". Овај регуларни израз ће радити као посластица:

      Образац : ^((?!лимони).)*$

      Очигледно је овде потребно неко објашњење. Негативан поглед унапред (?!лимони) гледа удесно да види да ли испред нема речи „лимуни“. Ако "лимони" није ту, онда тачка одговара било ком знаку осим прелома линије. Горњи израз обавља само једну проверу, а квантификатор * га понавља нула или више пута, од почетка стринга усидреног са ^ до краја стринга усидреног са $.

      Да бисте игнорисали велика и мала слова текста, поставили смо 3. аргумент на ФАЛСЕ како бисмо нашу функцију учинили неосјетљивом на велика и мала слова:

      =RegExpMatch(A5, $A$2, FALSE)

      Савјети и напомене:

      • Горњи регуларни израз ради само за једнолиније стрингове. У случају стрингова милти-редова, знакови ^ и $ одговарају почетку и крају сваке линије уместо почетка и краја улазног низа, стога редовни израз тражи само у првом реду.
      • Да бисте упарили низове који не почињу са одређеним текстом , користите регуларни израз као што је ^(?!лемони).*$
      • Да бисте ускладили низове који не завршавају са одређеним текстом , укључитекрајњи стринг се сидри у образац претраге: ^((?!лемонс$).)*$

      Подударање без обзира на велика и мала слова

      У класичним регуларним изразима постоји посебан образац за подударање без обзира на велика и мала слова (?и), које није подржано у ВБА РегЕкп. Да би се превазишло ово ограничење, наша прилагођена функција прихвата трећи опциони аргумент под називом матцх_цасе . Да бисте извршили подударање без обзира на велика и мала слова, једноставно га поставите на ФАЛСЕ.

      Рецимо да желите да идентификујете датуме као што су 22. март или 1. март 2022. Да бисмо ускладили формате дд-ммм-ииии и д-ммм-ии , користимо следећи регуларни израз.

      Образац : \б\д{1,2}-(јанцифре било где у низу укључујући 10-цифрени или 100-цифрени број. Ако ово није оно што тражите, ставите ивицу речи \б са обе стране.

      Образац : \б\д{7}\б

      =RegExpMatch(A5:A9, "\b\d{7}\b")

      Регекс за подударање бројева телефона

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

      У доњем скупу података, тражићемо 10-цифрене бројеве који имају 3 цифре у прве 2 групе и 4 цифре у последњој групи. Групе се могу одвојити тачком, цртицом или размаком. Прва група може или не мора бити затворена у заградама.

      Образац: (\(\д{3}\)

    Мајкл Браун је посвећен технолошки ентузијаста са страшћу за поједностављење сложених процеса помоћу софтверских алата. Са више од деценије искуства у технолошкој индустрији, усавршио је своје вештине у Мицрософт Екцел-у и Оутлоок-у, као и у Гоогле табеле и документима. Мајклов блог посвећен је дељењу свог знања и стручности са другима, пружајући једноставне савете и упутства за побољшање продуктивности и ефикасности. Без обзира да ли сте искусан професионалац или почетник, Мајклов блог нуди вредне увиде и практичне савете како да на најбољи начин искористите ове основне софтверске алате.