Tabloya naverokê
Di vê hînkirinê de, em ê li ser çawaniya karanîna regex-ê ji bo lihevanîna rêzikên di Excel-ê de nihêrînek kûr bibînin.
Dema ku hûn hewce ne ku di nav rêzekê de nirxek diyar bibînin ji hucreyan, hûn ê fonksiyona MATCH an XMATCH bikar bînin. Dema ku di hucreyek rêzek taybetî de digerin, fonksiyonên FIND û SEARCH bi kêr têne. Û hûn çawa dizanin ka hucreyek agahdariya ku bi şêweyek diyarkirî re têkildar e heye? Eşkere ye, bi bikaranîna îfadeyên rêkûpêk. Lê li derveyî qutiyê Excel piştgirî nade regexes! Xem neke, em ê wê bi zorê bikin :)
Fonksiyon Excel VBA Regex ku rêzan li hev bike
Wek ku ji sernavê pir zelal e, da ku bêjeyên birêkûpêk bikar bînin. di Excel de, hûn hewce ne ku fonksiyona xwe biafirînin. Xweşbextane, VBA-ya Excel xwedan hêmanek RegExp e, ku hûn dikarin di koda xwe de mîna ku li jêr tê xuyang kirin bikar bînin:
Fonksiyona Giştî RegExpMatch(navbera_navê Wek Rêze, nimûne Wek String, Bijara_case Vebijarkî Wek Boolean = Rast) Wek Guhertoya Dim arRes() Wek Varyant 'array ji bo hilanîna encaman Dim iInputCurRow, iInputCurCol, cntInputRows, cntInputCols Bi qasî 'indeksa rêza heyî ya di rêza çavkaniyê de, nîşana stûna heyî ya di rêza çavkaniyê de, hejmartina rêzan, hejmartina stûnên Ser Çewtiyê GoTo ErrHandl RegExpMatch = arRes Set regex = CreateObject ("VBScript.RegExp") regex.pattern = pattern regex.Global = Rast regex.MultiLine = Rast Ger Rast = match_case Paşê regex.ignorecase regex = Rastî. Dawîbiwêjên.Nimûne : \b[\w\.\-]+@[A-Za-z0-9]+[A-Za-z0-9\.\- ]*[A-Za-z0-9]+\.[A-Za-z]{2,24}\b
Ji bo ku em çêtir fam bikin ka li vir çi diqewime, werin em ji nêz ve li her beşê binêrin :
- Navê bikarhêner dibe ku herf, jimar, binê xêz, xal û daçek hebin. Ji bîr mekin ku \w bi her herf, jimar an binxetê re têkildar e, em regeksa jêrîn distînin: [\w\.\-]+
- Navê domainê dibe ku tîpên mezin û piçûk hebin, jimare, kêşan (lê ne di pozîsyona yekem an ya paşîn de) û xal (di rewşa jêrdomînan de). Ji ber ku xêzkirin nayê destûr kirin, li şûna \w em 3 tîpên cuda yên karakteran bikar tînin: [A-Za-z0-9]+[A-Za-z0-9\.\-]*[A-Za-z0-9 ]+
- Domana asta jorîn ji xalekê pêk tê û bi tîpên mezin û biçûk tê. Ew dikare ji 2 heta 24 tîpan hebe (TLD ya herî dirêj a ku niha heye): \.[A-Za-z]{2,24}
Nîşe. Nimûne dihesibîne ku navê domainê 2 an zêdetir tîpên alfanjimarî dihewîne.
Bi nivîsa orîjînal a di A5 de û bi şêwaza di A5 de, formula vî şeklî digire:
=RegExpMatch(A5, $A$2)
An jî hûn dikarin birêkûpêkek hêsantir bikar bînin. îfadeya ji bo erêkirina e-nameyê bi komek tîpên piçûk an mezin:
Pattern : \b[\w\.\-]+@[a-z0-9]+[a- z0-9\.\-]*[a-z0-9]+\.[a-z]{2,24}\b
Lê formula xwe nehessas bike:
=RegExpMatch(A5, $A$2, FALSE)
Formula IF-ê ya Excel bi regeksa hevberdanê re
Ji ber rastiya ku çêkirî û xwerû yefonksîyon xweş bi rê ve diçin, tiştek tune ku pêşî li we bigire ku hûn wan bi hev re di yek formulek de bikar neynin.
Ji bo vegerandin an hesabkirina tiştek heke bêjeyek birêkûpêk li hev were û tiştek din heke ne li hev be, RegExpMatch-ya xwerû têxe fonksiyona di nivîsara mentiqî ya IF de:
IF(RegExpMatch(…), [value_if_true], [value_if_false])Mînakî, heke rêzikek di A5 de navnîşanek e-nameyek derbasdar hebe, hûn dikarin "Erê" vegerînin; wekî din "Na".
=IF(RegExpMatch(A5, $A$2,), "Yes", "No")
Hejmar bike ku regex bi hev re be
Ji ber ku fonksiyonên xwemalî yên Excel piştgirî nadin îfadeyên birêkûpêk, ew e ne gengaz e ku meriv regexek rasterast di fonksiyona COUNTIS an COUNTIFS de bihêle. Xwezî, hûn dikarin vê fonksiyonê bi karanîna fonksiyona meya xwerû bişelînin.
Bifikirin ku we regeksek bikar aniye da ku hûn hejmarên têlefonê li hev bikin û encamên di stûna B de derxînin. ji bo hejmartina nirxên RAST di B5: B9 de. Û ew dikare bi hêsanî bi karanîna formula COUNTIF-a standard pêk were:
=COUNTIF(B5:B9, TRUE)
Ma hûn di pelgeya xebata xwe de stûnên zêde naxwazin? Pirsgirêk nîne. Ji bîr mekin ku fonksiyona meya xwerû dikare di yek carê de gelek şaneyan pêvajoyê bike û SUM-ya Excel dikare nirxan di rêzikekê de zêde bike, li vir tiştê ku hûn dikin hene:
- Referansek rêzê ji RegExpMatch re peyda bikin, da ku ew vegere rêza nirxên TRUE û FALSE.
- Negasyonek ducar (--) bikar bînin da ku nirxên mantiqî bi yekan ûsifir.
- Fonksiyon SUM-ê bigire da ku 1 û 0-yan di rêzika encam de lê zêde bike.
=SUM(--RegExpMatch(A5:A9, $A$2))
Lihevkirina Reges bi Ultimate Suite re
Bikarhênerên meya Ultimate Suite dikarin çar fonksiyonên Regex-ê yên hêzdar bikar bînin bêyî ku kodek VBA li pirtûkên xwe yên xebatê zêde bikin ji ber ku ew di dema sazkirina pêvekê de bi hêsanî di Excel de têne yek kirin. Fonksiyonên me yên xwerû ji hêla motora standard .NET RegEx ve têne hilberandin û piştgirî dide bêjeyên birêkûpêk ên klasîk ên bi tevahî taybetmendî.
Fonksiyon RegexMatch-a xwerû çawa bikar tînin
Bihesibînin ku we guhertoya dawî ya Ultimate Suite sazkirî ye ( 2021.4 an derengtir), hûn dikarin di du gavên hêsan de formula Regex Match biafirînin:
- Li ser tabloya Ablebits Data , di koma Text de, bikirtînin. Amûrên Regex .
- Hilbijêre rêzikên çavkaniyê.
- Nimûneya xwe binivîsin.
- Vebijarka Lihevhatin hilbijêrin.
- Ji bo ku encam wek formul, ne nirx hebin, hilbijêre Wekî formulekê têxinê qutîka kontrolê.
- Bişkoka Lihevhatin bikirtînin.
Demek şûnda, fonksiyona AblebitsRegexMatch di stûnek nû ya rastê daneya we de tê danîn.
Di dîmena jêrîn de, fonksiyon kontrol dike ka rêzikên di stûna A de 7-hejmarî ne. jimare an na.
Serişte:
- Fonc tion dikare bixin rasterast di şaneyek debi rêya qutiya diyalogê ya standard Fonksiyon têxe , ku ew di bin AblebitsUDFs de hatiye kategorîzekirin.
- Ji hêla xwerû ve, vegotinek birêkûpêk li formulê tê zêdekirin, lê hûn jî dikarin bihêlin ew di hucreyek cuda de. Ji bo vê yekê, tenê ji bo argumana 2yemîn referansek hucreyê bikar bînin.
- Ji hêla xwerû ve, fonksiyona hesas-qeyd e . Ji bo lihevhatina bêhesasî, qalibê (?i) bikar bînin.
Ji bo bêtir agahdarî, ji kerema xwe li fonksiyona AblebitsRegexMatch binêre.
Bi vî rengî meriv li Excel-ê lihevhatina birêkûpêk çawa dike. Ez spasiya we dikim ji bo xwendinê û li hêviya dîtina we di hefteya pêş de li ser bloga me me!
Daxistinên berdest
Nimûneyên Excel Regex Match (pelê xlsm)
Ultimate Suite 14- Guhertoya rojane ya bi tevahî fonksiyonel (pelê .exe)
Ger cntInputRows = input_range.Rows.Count cntInputCols = input_range.Columns.Count ReDim arRes(1 Ji cntInputRows, 1 Ji bo cntInputCols) Ji bo iInputCurRow = 1 Ji bo cntInputRows Ji bo iInputCurlsCol = 1 Ji bo cntInputRows Ji bo iInputCurlsCol = 1 Ji bo cntInputRows Ji bo iInputCurlsCol = .Cells(iInputCurRow, iInputCurCol).Nirx) Paşê Paşê RegExpMatch = arRes Fonksiyona Derketinê ErrHandl: RegExpMatch = CVERr(xlErrValue) Fonksiyona DawîKodê di edîtorê VBA de bixin, û fonksiyona weya nû RegMatch e ji bo bikaranîna amade. Heke hûn bi VBA-yê re ne pir tecrûbir in, ev rêber dikare bibe alîkar: Meriv çawa koda VBA-yê têxe Excel.
Nîşe. Piştî danîna kodê, ji bîr mekin ku pelê xwe wekî pirtûka xebatê ya çalak-makro (.xlsm) hilînin.
Hevoksaziya RegExpMatch
Fonksiyon RegExpMatch kontrol dike ka beşek ji rêzika çavkaniyê bi bêjeyeke rêkûpêk re li hev dike yan na. Encam nirxek Boolean e: TRUE heke bi kêmanî yek lihevhatî were dîtin, FALSE wekî din.
Fonksiyonek meya xwerû 3 argumanan hene - du yekem hewce ne û ya paşîn vebijarkî ye:
RegExpMatch(text , nimûne, [hevberî_case])Li ku:
- Nivîs (pêdivî ye) - yek an jî çend rêzikên ku tê de bigere. Dikare wekî şaneyek an referansa rêzê were peyda kirin.
- Şablon (pêdivî ye) - îfadeya birêkûpêk a ku li hev tê. Dema ku rasterast di nav formulekê de were danîn, pêdivî ye ku nimûneyek di nav tîpên ducarî de were girtin.
- Match_case (vebijarkî) - hevberdanê diyar dikeawa. Ger RAST an jêbirin (default), lihevhatina hesas a dozê tê kirin; heke DEREWT - ne hesas e.
Fonksiyon di hemî guhertoyên Excel 365, Excel 2021, Excel 2019, Excel 2016, Excel 2013 û Excel 2010 de dixebite.
3 tiştên ku hûn divê li ser RegExpMatch zanibin
Berî ku em bigihîjin hesabên pratîkî, ji kerema xwe bala xwe bidin xalên jêrîn ên ku hin teknîkan ronî dikin:
- Fonksiyon dikare hucreyek yekane an rêzeya şaneyan . Di rewşa paşîn de, encam di şaneyên cîran de di forma rêzek dînamîkî de, an rêzek rijandinê de têne vegerandin, mîna ku di vê nimûneyê de tê xuyang kirin.
- Ji hêla xwerû ve, fonksiyonê hesasiya dozê ye . Ji bo paşguhkirina kêşeya nivîsê, argumana match_case deyne ser FALSE. Ji ber tixûbên VBA Regexp, nimûneya nehesas (?i) nayê piştgirî kirin.
- Eger nimûneyeke derbasdar neyê dîtin, fonksiyon FALSE vedigerîne; heke pattern nederbasdar be , #VALUE! çewtî çêdibe.
Li jêr, hûn ê çend mînakên hevberdana regex ku ji bo armancên xwenîşandanê hatine afirandin bibînin. Em nekarin garantî bikin ku qalibên me dê bi cûrbecûr daneyên têketinê yên di pelên xebata weya rastîn de bêkêmasî bixebitin. Berî ku hûn hilberînê bikin, bi rastî ceribandin û şêwazên nimûneyên me li gorî hewcedariyên xwe rast bikin.
Çawa meriv regex-ê bikar tîne da ku rêzikên di Excel-ê de li hev bikin
Dema ku hemî rêzikên ku hûn dixwazin li hev bikin xwedî heman nimûne,bêjeyên birêkûpêk çareseriyek îdeal in.
Bihesibînin ku hûn rêzek şaneyên (A5:A9) hene ku di derheqê hin tiştan de hûrguliyên cihêreng hene. Hûn dixwazin bizanibin kîjan hucreyan SKU hene. Bihesibînin ku her SKU ji 2 tîpên mezin, defek û 3 reqeman pêk tê, hûn dikarin wan bi îfadeya jêrîn bi hev bidin hev.
Pattern : \b[A-Z]{2}-\ d{3}\b
Cîhê ku [A-Z]{2} tê wateya her 2 tîpên mezin ji A heta Z û \d{3} tê wateya her 3 reqeman ji 0 heta 9. Karaktera \b peyvekê nîşan dide sînor, tê wateya ku SKU peyvek cihê ye, û ne beşek ji rêzikek mezintir e wek 23-MAR-2022.
Bi nimûneya hatî damezrandin, em dikarin derbasî nivîsandina formulekê bibin. Di bingeh de, karanîna fonksiyonek xwerû ji ya xwemalî ne cûda ye. Gava ku hûn dest bi nivîsandina formulek bikin, navê fonksiyonê dê di navnîşa ku ji hêla Xweseriya Xweser a Excel ve hatî pêşniyar kirin de xuya bibe. Lêbelê, di Excel Array Dînamîk de (Microsoft 365 û Excel 2021) û Excel-ê kevneşopî (2019 û guhertoyên kevntir) de çend nuwaze hene.
Di yek hucreyê de xêzika hev bikin
Ji bo ku rêzek li hev bikin di hucreyek yekane de, di argumana yekem de behsa wê şaneyê bikin. Tê xwestin ku argumana duyemîn îfadeyeke birêkûpêk bihewîne.
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
Nimûne jî dikare di şaneyek pêşwextkirî de were hilanîn, ku bi referansek bêkêmasî ($A$2) tê girtin:
=RegExpMatch(A5, $A$2)
Piştî ku formula di şaneya yekem de têkevin, hûn dikarin wê bikşînin ser hemû rêzên din.
Ev rêbazdi hemû guhertoyên Excel-ê de xweş dixebite .
Di gelek şaneyan de yekcar rêzan bidin hev
Ji bo ku gelek rêzikan bi yek formula re li hev bikin, di argumana yekem de referansek rêzê têxe:
=RegExpMatch(A5:A9, "\b[A-Z]{2}-\d{3}\b")
Di Excel 365 û Excel 2021 de ku rêzikên dînamîkî piştgirî dikin, bi vî rengî dixebite - hûn di hucreya yekem de formula binivîsin, Enter bixin, û formula bixweber di şaneyên jêrîn de diherike.
Di Excel 2019 û berê de, ew tenê wekî formula kevneşopî ya rêzê ya CSE dixebite, ku di nav rêzek hucreyan de tête navnîş kirin û bi tikandina bişkokên Ctrl + Shift + Enter bi hev re tê qedandin. 7>
Ji bo ku ji 0-ê heta 9-ê yek reqemê bihevre bikin, di regexê de karaktera \d bikar bînin. Li gorî peywira xwe ya taybetî, pîvanek minasib lê zêde bike an jî nimûneyek tevlihevtir biafirîne.
Regex ji bo ku her jimarekê li hev bike
Ji bo ku hejmareke bi her dirêjahî re were berhev kirin, pîvana + rastê li dû / deyne. karaktera d, ku dibêje meriv li hejmarên ku 1 an jî zêdetir jimaran dihewîne bigerin.
Regex ji bo ku jimareya dirêjahiya taybetî li hev bicivîne
Heke mebesta we ew e ku hûn nirxên hejmarî yên ku hejmareke diyarkirî dihewîne hev bikin, wê hingê \d bi pîvanek guncan re bikar bînin.
Mînakî, ji bo ku jimareyên fatûreyê ku tam ji 7 reqeman pêk tên li hev bikin, hûn ê \d{7} bikar bînin. Lêbelê, ji kerema xwe ji bîr mekin ku ew ê 7 hev bikewek ku tê çaverêkirin:
Nîşe:
- Kodên navneteweyî nayên kontrol kirin, ji ber vê yekê dibe ku hebin an nebin.
- Di biwêjên birêkûpêk de, \s ji bo her karekterek cîhê spî wekî cîh, tab, vegera gerîdeyê, an rêzek nû radiweste. Ji bo ku tenê cîhan bihêlin, [-\' bikar bînin. ] li şûna [-\.\s].
- [^13] dê her karakterek yekane ku ne 1 an 3 be.
- [^1-3] dê her karakterek ku ne 1 be li hev bike, 2 an 3 (ango her reqemek ji 1 heta 3).
- Regeksa jorîn tenê ji bo rêzikên yek-xet dixebite. Di rewşa rêzikên milti-xêz de, tîpên ^ û $ li şûna destpêk û dawiya rêzika têketinê serî û dawiya her rêzê li hev dikin, ji ber vê yekê regex tenê di rêza yekem de digere.
- Ji bo berhevkirina rêzikên ku dest pê nakin bi hin nivîsan re , bêjeyeke rêkûpêk wek ^(?! lemon) bikar bînin.*$
- Ji bo berhevkirina rêzikên ku bi hin nivîsan bi dawî nabin , têxin nav xwexêza dawîyê di nav qalibê lêgerînê de girêdide: ^((?! lemon$).)*$
Regex ji bo NOT lihevhatina karakterê
Ji bo dîtina rêzikên ku karakterek diyar NE, hûn dikarin çînên karakterên negatîf [^ ] yên ku li hev dikin bikar bînin. tiştek NE di nav kevanan de ye. Mînakî:
Di navnîşek jimareyên têlefonê de, bihesibînin ku hûn dixwazin yên ku koda wan a welat tune ne bibînin. Ji bîr mekin ku her kodek navneteweyî nîşana +-ê vedihewîne, hûn dikarin çîna karaktera [^\+] bikar bînin da ku rêzikên ku nîşanek zêde tê de ne bibînin. Girîng e ku meriv zanibe ku raveka jorîn bi her karakterek yekane ku ne + ye re têkildar e. Ji ber ku jimareyek têlefonê dikare li her deverekê di rêzekê de be, ne hewce ye ku di destpêkê de be, pîvana * tê zêdekirin da ku her karakterek paşîn kontrol bike. Destpêka ^ û dawiya $ anchors piştrast dikin ku tevahiya rêzê tête kirin. Di encamê de, em îfadeya birêkûpêk a jêrîn werdigirin ku dibêje "karektera + di tu cîhekî di rêzê de li hev nekin".
Pattern :^[^\+]*$
=RegExpMatch(A5, "^[^\+]*$")
Regex ji bo NEhevhatina rêzika NE hevber bike
Tevî ku ji bo hevoksaziya birêkûpêk a taybetî tune. ne bi rêzek taybetî re li hev nakin, hûn dikarin vê tevgerê bi karanîna pêşekek neyînî bişelînin.
Heke hûn dixwazin rêzikên ku tê de ne peyva "lîmon" bibînin. Ev vegotina birêkûpêk dê karekî bikêr bike:
Nablo : ^((?! lemon).)*$
Eşkere ye, li vir hin ravekirin hewce ye. Nêrîna neyînî (?! leymûn) li rastê dinêre da ku bibîne ka li pêş peyva "leymûn" tune. Ger "lîmon" ne li wir be, wê hingê xal ji bilî veqetandina rêzê bi her karakterê re têkildar e. Gotina jorîn tenê kontrolekê dike, û jimarvana * wê sifir an jî zêdetir caran dubare dike, ji destpêka rêza ku bi ^ ve girêdayî ye heta dawiya rêza ku bi $ ve girêdayî ye.
Ji bo paşguhkirina rewşa nivîsê, me argumana 3an danî ser FALSE da ku fonksiyona xwe nehesas bike:
=RegExpMatch(A5, $A$2, FALSE)
Serişte û not:
Lihevhatina nehesasiya haletê
Di biwêjên birêkûpêk ên klasîk de, nimûneyek taybetî heye ji bo Lihevhatina bêhesasî (?i), ku di VBA RegExp de nayê piştgirî kirin. Ji bo derbaskirina vê sînordarkirinê, fonksiyona meya xwerû argumana vebijarkî ya 3yemîn bi navê match_case qebûl dike. Ji bo ku lihevhatina nehesas a dozê bikin, bi tenê wê bikin FALSE.
Em bibêjin ku hûn dixwazin tarîxên wekî 1-Adar-22 an 01-MAR-2022 nas bikin. Ji bo ku em bi formatên dd-mmmm-yyyy û d-mmmm-yy li hev bikin, em îfadeya rêkûpêk a jêrîn bikar tînin.
Pattern : \b\d{1,2}-(Janreqeman li her derê rêzê tevî jimarek 10-hejmar an 100-reqemî. Heke hûn lê digerin ne ev e, peyva sînorê \b li her du aliyan deynin.
Pattern : \b\d{7}\b
=RegExpMatch(A5:A9, "\b\d{7}\b")
Regex ji bo hevberdana hejmarên têlefonê
Ji ber ku jimareyên têlefonê dikarin bi cûrbecûr formatan bêne nivîsandin, ji bo hevberdana wan birêkûpêkek birêkûpêktir a sofîstîke hewce dike.
Di daneheva jêrîn de, em ê li hejmarên 10-reqemî bigerin ku di 2 komên pêşîn de 3 reqem û di koma paşîn de 4 reqeman hene. Kom dikarin bi serdemek, xêzik an valahiyê werin veqetandin. Koma yekem dibe ku di nav parantezê de bête girtin an nebe.
Nablo: (\(\d{3}\)