Gotinên Birêkûpêk (RegExp) di Power Query de

Ger hûn bi kêmanî hinekî bi vegotinên birêkûpêk nas in, wê hingê hûn ne hewce ne ku wan reklam bikin. Ger hûn ne bi tevahî di mijarê de ne, wê hingê bêjeyên birêkûpêk (Rêvebirên Rêkûpêk = RegExp = "regexps" = "bi rêkûpêk") zimanek e ku, bi karekter û qaîdeyên taybetî, binerdeyên pêwîst di nivîsê de têne gerandin, ew têne derxistin. an jî bi nivîsek din tê guhertin. Ev amûrek pir bi hêz û xweşik e, rêzek mezinahiyê ji hemî awayên din ên xebata bi nivîsê re bilindtir e.

Min berê bi hûrgulî û bi komek mînakên jiyanê ve diyar kir ku hûn çawa dikarin bi karanîna makroyên hêsan piştgirîya îfadeya birêkûpêk li Excel zêde bikin - heke we ev gotar nexwendiye, ez bi tundî pêşniyar dikim ku hûn berî ku bidomînin bixwînin. Hûn ê gelek tiştên nû kifş bikin, ez garantî dikim 🙂

Lêbelê, pirs vekirî dimîne - meriv çawa şiyana karanîna bêjeyên birêkûpêk di Power Query de zêde bike? Power Query, bê guman, bi serê xwe baş e û dikare bi nivîsê re gelek tiştan bike (birrîn, zeliqandin, paqijkirin, hwd.), lê heke hûn karibin wê bi hêza vegotinên birêkûpêk derbas bikin, ew ê tenê bombeyek be.

Mixabin, ji bo xebatê bi RegExps re di Power Query de fonksiyonên çêkirî tune, û arîkariya fermî û piştgiriya teknîkî ya Microsoft-ê bersiva vê pirsê neyînî dide. Lêbelê, rêyek li dora vê sînorkirinê heye 🙂

Esasê rêbazê

Fikra sereke ji bo şermezarkirina hêsan e.

Di navnîşa kapasîteyên Query-ê yên çêkirî de, fonksiyonek heye Web.Rûpel. Danasîna vê fonksiyonê li ser malpera alîkariya fermî ya Microsoft-ê zehf kurt e:

Gotinên Birêkûpêk (RegExp) di Power Query de

Wergerandin, ev ê bibe: "Naveroka belgeya HTML-ê vedigerîne nav strukturên pêkhateyên wê, û her weha nûnertiya belgeya tevahî û laşê wê piştî ku etîket têne rakirin." Werhasilî kelam, eşkere.

Bi gelemperî ev fonksiyon dema ku daneya ji tevneyê vediguhezîne tê bikar anîn û bixweber tê veguheztin, mînakî, dema ku em li ser tabê hilbijêrin. Jimare Ferman Ji Înternetê (Daneyên - Ji malperê). Em fonksiyonê wekî argumanek rûpelek malperê didin, û ew naveroka wê di forma tabloyan de ji me re vedigerîne, ku berê hemî etîketan paqij kiriye.

Ya ku arîkar NA dibêje ev e ku ji bilî zimanê nîşankirina HTML karî Web.Rûpel Skrîptên JavaScript piştgirî dike, ku niha li ser malperên li ser Înternetê li her derê ye. Û JavaScript, di encamê de, her gav karîbû bi vegotinên birêkûpêk re bixebite û ji bo RegExps fonksiyonên çêkirî hene! Ji ber vê yekê ji bo bicihanîna îfadeyên birêkûpêk di Power Query de, em ê hewce bikin ku fonksiyonên Web.Page wekî argumanek bernameyek piçûk a JavaScript-ê ku dê hemî karan ji bo Power Query bike bixwin.

Ew di JavaScript-a paqij de çi xuya dike

Li ser Înternetê di JavaScriptê de gelek dersên hûrgulî li ser xebitandina bi îfadeyên birêkûpêk hene (mînakî, yek, du).

Bi kurtî û hêsankirî, koda JavaScript dê bi vî rengî xuya bike:

Gotinên Birêkûpêk (RegExp) di Power Query de

Vir:

  • var str = 'Ji bo sosîsê fatûreyên 123 û 789 bidin'; - guherbarek çêbikin st û jê re nivîsa çavkanî ya ku em ê analîz bikin destnîşan bikin.
  • var pattern = /d+/gi; - bêjeyek birêkûpêk biafirînin û wê têxin nav guhêrbarekê mînak.

    Îfade bi qertafa (/) dest pê dike.

    Ji xwe îfadeya li vir, wek nimûne, ev e d+ ji bo her rêzek jimareyan radiweste.

    Di nav perçeya piştî îfadeyê de, pîvanên lêgerînê yên din (guhêrker) hene - ew dikarin bi her rêzê bêne destnîşan kirin:

    • g – tê wateya lêgerîna gerdûnî, ango piştî dîtina hevberdanê, divê hûn nesekinin, lê lêgerînê heya dawiya nivîsê bidomînin. Ger ev guhêrbar neyê danîn, wê hingê skrîpta me dê tenê hevbera yekem vegerîne (123)
    • i - lêgerîna bêyî guhdana rewşa tîpan
    • m - Lêgerîna pir-xêzik (dema ku nivîsa çavkaniyê di çend rêzan de tê dabeş kirin tê bikar anîn)
  • var encam = str.match(pattern).join(';'); - di nivîsa çavkaniyê de lêgerînek pêk bînin (st) bi îfadeya rêkûpêk (mînak) û encaman têxin nav guherbarekê netîce, bi karanîna fermanê wan bi nîvcolonê ve girêdide bihevgirêdan
  • dokument.nivîsandin(encam); - naveroka guherbarê encam nîşan bide

Di heman demê de bala xwe bidin ku rêzikên nivîsê (ji bilî îfadeyên birêkûpêk) di JavaScriptê de di nav apostrofê de têne girtin, ne wekî ku ew di Power Query an VBA de ne.

Di encam de, ev skrîpt dê di encamê de hemî hejmarên ku di nivîsa çavkaniyê de hatine dîtin bide me:

123, 789

Kursa kurt a JavaScript qediya, spas ji we re. Hêvî dikim ku hûn mantiqê bistînin 🙂

Ew dimîne ku vê avakirinê veguherîne Power Query.

Fonksiyona Nivîsarê Bi Vebêja Birêkûpêk Di Query Query de Bigerin û Derxin

Em jêrîn dikin:

1. Excel-ê vekin û di tabê de Query nû ya vala vala biafirînin Dane - Daneyan bistînin / Daxwazê ​​biafirînin - Ji çavkaniyên din - Daxwaza vala (Daneyên - Daneyên bistînin / Lêpirsîna nû - Ji çavkaniyên din - Pirsa vala). Ger guhertoyek we ya kevn a Excel 2010-2013 û Power Query heye ku we ne hundurîn e, lê wekî pêvekek cûda hate saz kirin, wê hingê ev hemî dê li ser tabê be. Pirsa HêzêNot na Jimare.

2. Di pencereya vala ya edîtorê pirsê de ku vedibe, di panela rastê de, tavilê navê fonksiyona meya pêşerojê têkevin (mînak, fxRegExpExtract)

Gotinên Birêkûpêk (RegExp) di Power Query de

3. Ka em herin tabê Dîtin - Edîtorê pêşkeftî (Nêrîn - Edîtorê Pêşkeftî), em hemî koda M-ya daxwaziya vala jêbirin û koda superfonksiyona xwe li wir bixin:

Gotinên Birêkûpêk (RegExp) di Power Query de

Destên xwe temaşe bikin:

Di rêza yekem de, em dibêjin ku fonksiyona me dê sê argumanên nivîsê hebin: txt - nivîsa orîjînal tê analîz kirin, regex - şêweya vegotina birêkûpêk, delim - Karaktera veqetandî ji bo nîşandana encaman.

Piştre em fonksiyonê dibêjin Web.Rûpel, koda JavaScriptê ya ku li jor di argumana xwe de hatî destnîşan kirin ava dike. Em argumanên xwe yên guhêrbar di kodê de dixin û dewsa wan dikin.

Perçê şikestî:

[Daneyên]{0}[Zarok]{0}[Zarok]{1}[Text]{0}

… pêdivî ye ku em bi encamên ku em hewce ne re "bikevin" tabloyê. Mesele ew e ku fonksiyona Web.Rûpel di encamê de, ew çend tabloyên hêlînkirî çêdike ku avahiya rûpelek malperê dubare dikin. Bêyî vê perçeya M-kodê, fonksiyona me dê vê derxe:

Gotinên Birêkûpêk (RegExp) di Power Query de

… û em neçar in ku peyvê çend caran bikirtînin Mêz, li pey hev "dikeve" nav tabloyên hêlînên zarokan ên di stûnan de zarok:

Gotinên Birêkûpêk (RegExp) di Power Query de

Li şûna van hemî vegotinê, em tavilê di koda fonksiyona xwe de nîşan didin ku tablo û stûna hêlîn (Nivîstok) divê em.

Li vir, bi rastî, hemî veşartî hene. Ew dimîne ku bişkojka bitikîne Qedandin di pencereyê de edîtorê pêşketî, cihê ku me koda xwe lêxist, û hûn dikarin berbi ya herî xweş bimeşin - fonksiyona me di xebatê de biceribînin.

Li vir çend mînakên tov hene.

Nimûne 1. Ji danasîna dravdanê jimare û mêjûya hesabê werdigire

Me daxuyaniyek bankê ya bi ravekirin (armanc) dravdanê heye, ku hûn hewce ne ku hejmar û tarîxên fatûreyên dravdî li stûnên cihêreng derxînin:

Gotinên Birêkûpêk (RegExp) di Power Query de

Em tabloyê bi awayê standard li Power Query bar dikin Daneyên - Ji Tablo / Rêze (Daneyên - Ji Tkarîn/Rmilyaket).

Dûv re em bi fonksiyona xwe re stûnek hesabkirî lê zêde dikin Stûn lê zêde bikin - Fonksiyona Xweserî Bang bikin (Stûn lê zêde bike - Fonksîyona Xweserî Vegerîne) û argumanên wê binivîse:

Gotinên Birêkûpêk (RegExp) di Power Query de

Wek îfadeyeke rêkûpêk (arguman regex) şablonê ku em bikar tînin:

(d{3,5}|d{2}.d{2}.d{4})

... wergerandine wateya zimanê mirovan: 

hejmarên ji 3 heta 5 reqeman (hejmarên hesabê)

or

perçeyên forma "hejmara 2-bit - xal - hejmara 2-bit - xal - hejmara 4-bit", ango tarîxên forma DD.MM.YYYY.

Wekî karakterek veqetandî (argument delim) bikeve nîvco.

Piştî hilweşînê OK fonksiyona meya sêrbaz hemî daneyên destpêkê li gorî vegotina meya birêkûpêk analîz dike û ji me re stûnek bi hejmar û tarîxên fatûreyan ên hatine dîtin pêk tîne:

Gotinên Birêkûpêk (RegExp) di Power Query de

Dimîne ku wê bi nîvcolon bi karanîna fermanê veqetînin Mal - Stûna Split - Ji hêla Delimiter ve (Mal - Stûna veqetandî - Ji hêla veqetanker ve) û em tiştê ku me dixwest distînin:

Gotinên Birêkûpêk (RegExp) di Power Query de

Çelengî!

Mînak 2: Navnîşanên e-nameyê ji nivîsê derxînin

Bifikirin ku em tabloya jêrîn wekî daneyên destpêkê hene:

Gotinên Birêkûpêk (RegExp) di Power Query de

… ji ku derê pêdivî ye ku em navnîşanên e-nameyên ku li wir hatine dîtin derxin (ji bo zelaliyê, min di nivîsê de wan bi sor ronî kir).

Wekî mînaka berê, em tabloyê bi awayê standard bi navgîniya Power Query bar dikin Daneyên - Ji Tablo / Rêze (Daneyên - Ji Tkarîn/Rmilyaket).

Dûv re em bi fonksiyona xwe re stûnek hesabkirî lê zêde dikin Stûn lê zêde bikin - Fonksiyona Xweserî Bang bikin (Stûn lê zêde bike - Fonksîyona Xweserî Vegerîne) û argumanên wê binivîse:

Gotinên Birêkûpêk (RegExp) di Power Query de

Parzûnkirina navnîşanên e-nameyê karek dijwartir e û ji bo çareserkirina wê komek vegotinên birêkûpêk ên kabûsên cihêreng hene. Min yek ji vebijarkên hêsan bikar anî - ne îdeal, lê di pir rewşan de pir dixebite:

[w|.|-]*@w*.[w|.]*

Wek veqetanker (delim) hûn dikarin nîvcolon û valahiyek têkevin.

Kılik lı ser OK û em stûnek bi navnîşanên e-nameyê yên ku ji nivîsa orîjînal "porridge" hatine derxistin digirin:

Gotinên Birêkûpêk (RegExp) di Power Query de

Sihr!

PS

Wekî ku tê gotin: "Tiştek wusa baş tune ku meriv jê çêtir nebe." Power Query bi serê xwe xweş e, û dema ku bi vegotinên birêkûpêk re were hev kirin, di hilberandina her daneya nivîsê de hêz û nermbûnek bi tevahî nerealîst dide me. Ez hêvî dikim ku Microsoft rojek piştgirîya RegExp di nûvekirinên Power Query û Power BI de zêde bike û hemî dansên jorîn bi tembûrê re dê bibin tiştek berê. Belê, ji bo niha, erê.

Di heman demê de ez dixwazim lê zêde bikim ku lîstina bi vegotinên birêkûpêk li ser malpera https://regexr.com/ rehet e - rast di edîtorê serhêl de. Li wir di beşê de Nimûneyên Civakî Ji bo her demsalan hejmareke mezin demsalên birêkûpêk amade hene. Ceribandin - hemî hêza vegotinên birêkûpêk naha di Power Query de di xizmeta we de ye!

  • Gotinên birêkûpêk çi ne (RegExp) û meriv wan çawa di Excel de bikar tîne
  • Di Power Query de lêgerîna nivîsê ya bêkêmasî
  • Bi karanîna Power Query tabloyên ji pelên cihêreng berhev dikin

Leave a Reply