Regex para alisin ang ilang partikular na character o text sa Excel

  • Ibahagi Ito
Michael Brown
ang argumento ay tinanggal, ang lahat ng nahanap na tugma ay aalisin. Upang tanggalin ang isang partikular na tugma, tukuyin ang numero ng halimbawa.

Sa mga string sa ibaba, ipagpalagay na gusto mong tanggalin ang unang numero ng order. Ang lahat ng naturang numero ay nagsisimula sa hash sign (#) at naglalaman ng eksaktong 5 digit. Kaya, matutukoy natin ang mga ito gamit ang regex na ito:

Pattern : #\d{5}\b

Tinutukoy ng word boundary \b na ang isang katugmang substring ay hindi maaaring bahagi ng mas malaking string gaya ng #10000001.

Upang alisin ang lahat ng mga tugma, hindi tinukoy ang instance_num argument:

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

Upang tanggalin lamang ang unang paglitaw, itinakda namin ang instance_num argument sa 1:

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

Regex para alisin ang ilang partikular na character

Upang tanggalin ang ilang partikular na character mula sa isang string, isulat lang ang lahat ng hindi gustong character at paghiwalayin ang mga ito gamit ang vertical barsyntax na walang limitasyon sa VBA RegExp, at pangalawa, hindi nangangailangan ng pagpasok ng anumang VBA code sa iyong mga workbook dahil ang lahat ng pagsasama ng code ay ginagawa namin sa backend.

Ang iyong bahagi ng trabaho ay ang bumuo ng isang regular na expression at ihatid ito sa function :) Hayaan akong ipakita sa iyo kung paano gawin iyon sa isang praktikal na halimbawa.

Paano mag-alis ng text sa mga bracket at panaklong gamit ang regex

Sa mahabang text string, hindi gaanong mahalagang impormasyon ay madalas na nakapaloob sa [mga bracket] at (panaklong). Paano mo aalisin ang mga walang kaugnayang detalyeng iyon na pinapanatili ang lahat ng iba pang data?

Sa katunayan, nakagawa na kami ng katulad na regex para sa pagtanggal ng mga html tag, ibig sabihin, teksto sa loob ng mga anggulong bracket. Malinaw, ang parehong mga pamamaraan ay gagana rin para sa mga square at round bracket.

Pattern : (\(.*?\))

Naisip mo na ba kung gaano kalakas ang Excel kung mapapayaman ng isang tao ang toolbox nito gamit ang mga regular na expression? Hindi lang namin pinag-isipan ngunit pinaghirapan din namin ito :) At ngayon, maaari mong idagdag ang kahanga-hangang RegEx function na ito sa iyong sariling mga workbook at i-wipe out ang mga substring na tumutugma sa isang pattern sa lalong madaling panahon!

Noong nakaraang linggo, tiningnan namin sa kung paano gumamit ng mga regular na expression upang palitan ang mga string sa Excel. Para dito, gumawa kami ng custom na Regex Replace function. Tulad ng nangyari, ang pag-andar ay lumampas sa pangunahing paggamit nito at hindi lamang maaaring palitan ang mga string ngunit alisin din ang mga ito. Paano kaya iyon? Sa mga tuntunin ng Excel, ang pag-alis ng value ay walang iba kundi ang palitan ito ng walang laman na string, isang bagay na napakahusay ng aming Regex function!

VBA RegExp function na mag-alis ng mga substring sa Excel

Tulad ng alam nating lahat, ang mga regular na expression ay hindi sinusuportahan sa Excel bilang default. Upang paganahin ang mga ito, kailangan mong lumikha ng iyong sariling function na tinukoy ng gumagamit. Ang magandang balita ay ang naturang function ay nakasulat na, nasubok na, at handa nang gamitin. Ang kailangan mo lang gawin ay kopyahin ang code na ito, i-paste ito sa iyong VBA editor, at pagkatapos ay i-save ang iyong file bilang isang macro-enabled workbook (.xlsm).

Ang function ay mayroong sumusunod na syntax:

RegExpReplace(text, pattern, replacement, [instance_num], [match_case])

Ang unang tatlong argumento ay kinakailangan, ang huling dalawa ay opsyonal.

Kung saan:

  • Text - ang text string na hahanapinposible hanggang sa makahanap ito ng pagsasara ng bracket.

Alinmang pattern ang pipiliin mo, ang resulta ay magiging ganap na pareho.

Halimbawa, upang alisin ang lahat ng html tag mula sa isang string sa A5 at mag-iwan ng text, ang formula ay:

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

O maaari mong gamitin ang lazy quantifier tulad ng ipinapakita sa screenshot:

Ang solusyon na ito ay gumagana nang perpekto para sa iisang teksto (mga hilera 5 - 9). Para sa maramihang mga teksto (mga hilera 10 - 12), ang mga resulta ay kaduda-dudang - ang mga teksto mula sa iba't ibang mga tag ay pinagsama sa isa. Tama ba ito o hindi? Natatakot ako, hindi ito isang bagay na madaling mapagpasyahan - ang lahat ay nakasalalay sa iyong pag-unawa sa nais na resulta. Halimbawa, sa B11, ang resulta na "A1" ay inaasahan; habang nasa B10, maaaring gusto mong paghiwalayin ng espasyo ang "data1" at "data2."

Upang alisin ang mga html tag at paghiwalayin ang natitirang mga text gamit ang mga puwang, maaari kang magpatuloy sa ganitong paraan:

  1. Palitan ang mga tag ng mga puwang na " ", hindi mga walang laman na string:

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

  2. Bawasan ang maramihang mga puwang sa isang character na espasyo:

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

  3. I-trim ang mga nangunguna at sumusunod na espasyo:

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

Magiging ganito ang resulta:

Ablebits Regex Remove Tool

Kung nagkaroon ka ng pagkakataong gamitin ang aming Ultimate Suite para sa Excel, malamang na natuklasan mo na ang bagong Regex Tools na ipinakilala sa kamakailang release. Ang kagandahan ng mga .NET based Regex function na ito ay, una, sinusuportahan nila ang buong tampok na regular na expressionang pagpipiliang Alisin , at pindutin ang Alisin .

Upang makuha ang mga resulta bilang mga formula, hindi mga halaga, piliin ang check box na Ipasok bilang isang formula .

Upang alisin ang teksto sa loob ng mga bracket mula sa mga string sa A2:A5, iko-configure namin ang mga setting tulad ng sumusunod:

Bilang resulta, ang AblebitsRegexRemove function ay ipinasok sa isang bagong column sa tabi ng iyong orihinal na data.

Maaari ding direktang ipasok ang function sa isang cell sa pamamagitan ng karaniwang Insert Function dialog box, kung saan ito ay nakategorya sa ilalim ng AblebitsUDFs .

Dahil ang AblebitsRegexRemove ay idinisenyo upang mag-alis ng text, nangangailangan lamang ito ng dalawang argumento - ang source string at regex. Ang parehong mga parameter ay maaaring direktang tukuyin sa isang formula o ibinibigay sa anyo ng mga cell reference. Kung kinakailangan, ang custom na function na ito ay maaaring gamitin kasama ng alinmang native.

Halimbawa, upang i-trim ang mga karagdagang espasyo sa mga resultang string, maaari mong gamitin ang TRIM function bilang isang wrapper:

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

Iyan ay kung paano mag-alis ng mga string sa Excel gamit ang mga regular na expression. Salamat sa pagbabasa at umaasa akong makita ka sa aming blog sa susunod na linggo!

Mga available na download

Alisin ang mga string gamit ang regex - mga halimbawa (.xlsm file)

Ultimate Suite - trial na bersyon (.exe file)

sa.
  • Pattern - ang regular na expression na hahanapin.
  • Palitan - ang text na papalitan. Upang alisin ang mga substring na tumutugma sa pattern, gumamit ng walang laman na string ("") para sa kapalit.
  • Instance_num (opsyonal) - ang instance sa palitan. Kung aalisin, lahat ng nakitang tugma ay papalitan (default).
  • Match_case (opsyonal) - isang Boolean na value na nagsasaad kung tutugma o balewalain ang text case. Para sa case-sensitive na pagtutugma, gamitin ang TRUE (default); para sa case-insensitive - FALSE.
  • Para sa higit pang impormasyon, pakitingnan ang RegExpReplace function.

    Tip. Sa mga simpleng kaso, maaari mong alisin ang mga partikular na character o salita mula sa mga cell na may mga formula ng Excel. Ngunit ang mga regular na expression ay nagbibigay ng mas maraming opsyon para dito.

    Paano mag-alis ng mga string gamit ang mga regular na expression - mga halimbawa

    Tulad ng nabanggit sa itaas, upang alisin ang mga bahagi ng text na tumutugma sa isang pattern, dapat mong palitan ang mga ito na may walang laman na string. Kaya, ganito ang hugis ng isang generic na formula:

    RegExpReplace(text, pattern, "", [instance_num], [match_case])

    Ang mga halimbawa sa ibaba ay nagpapakita ng iba't ibang pagpapatupad ng pangunahing konseptong ito.

    Alisin lahat ng tugma o partikular na tugma

    Ang RegExpReplace function ay idinisenyo upang mahanap ang lahat ng mga substring na tumutugma sa isang partikular na regex. Aling mga pangyayari ang aalisin ay kinokontrol ng ika-4 na opsyonal na argumento, na pinangalanang instance_num .

    Ang default ay "all matches" - kapag ang instance_num concatenation operator (&) at Text function gaya ng RIGHT, MID at LEFT.

    Halimbawa, para isulat ang lahat ng numero ng telepono sa (123) 456-7890 na format, ang formula ay:

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

    Kung saan ang B5 ang output ng RegExpReplace function.

    Alisin ang mga espesyal na character gamit ang regex

    Sa isa sa aming mga tutorial, tiningnan namin kung paano alisin ang mga hindi gustong character sa Excel gamit ang mga inbuilt at custom na function. Pinapadali ng mga regular na expression ang mga bagay! Sa halip na ilista ang lahat ng mga character na tatanggalin, tukuyin lamang ang mga nais mong panatilihin :)

    Ang pattern ay nakabatay sa negated character classes - isang caret ang inilalagay sa loob ng isang character class [^ ] upang tumugma sa alinmang karakter na HINDI sa mga bracket. Pinipilit ito ng + quantifier na ituring ang magkakasunod na mga character bilang isang solong tugma, upang ang isang kapalit ay magawa para sa isang katugmang substring sa halip na para sa bawat indibidwal na character.

    Depende sa iyong mga pangangailangan, pumili ng isa sa mga sumusunod na regex.

    Upang alisin ang hindi alphanumeric na mga character, ibig sabihin, lahat ng character maliban sa mga titik at digit:

    Pattern : [^0-9a-zA-Z] +

    Upang i-purge ang lahat ng character maliban sa mga letra , mga digit at mga puwang :

    Pattern : [^0-9a-zA-Z ]+

    Upang tanggalin ang lahat ng character maliban sa mga titik , digit at underscore , maaari mong gamitin ang \ W na kumakatawan sa anumang character na HINDI alphanumeric character ounderscore:

    Pattern : \W+

    Kung gusto mong panatilihin ang ilan pang character , hal. mga bantas, ilagay ang mga ito sa loob ng mga bracket.

    Halimbawa, upang alisin ang anumang character maliban sa isang titik, digit, tuldok, kuwit, o espasyo, gamitin ang sumusunod na regex:

    Pattern : [^0-9a-zA-Z\., ]+

    Matagumpay nitong inaalis ang lahat ng espesyal na character, ngunit nananatili ang dagdag na whitespace.

    Upang ayusin ito, maaari mong i-nest ang function sa itaas sa isa pa na pumapalit sa maraming espasyo ng isang character na espasyo.

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

    O gamitin lang ang native TRIM function na may parehong epekto. :

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

    Regex para alisin ang mga hindi numeric na character

    Upang tanggalin ang lahat ng hindi numeric na character mula sa isang string, maaari mong gamitin alinman sa mahabang formula na ito o isa sa mga napakasimpleng regexe na nakalista sa ibaba.

    Itugma ang anumang character na HINDI isang digit:

    Pattern : \D+

    I-strip ang mga hindi numeric na character gamit ang mga negadong klase:

    Pattern : [^0-9]+

    Pattern : [^\d] <

    Tip. Kung ang iyong layunin ay alisin ang text at ibuhos ang natitirang mga numero sa magkakahiwalay na mga cell o ilagay ang lahat sa isang cell na pinaghihiwalay ng isang tinukoy na delimiter, pagkatapos ay gamitin ang RegExpExtract function tulad ng ipinaliwanag sa Paano mag-extract ng mga numero mula sa string gamit ang mga regular na expression.

    Regex para alisin ang lahat pagkatapos ng space

    Upang i-wipe out ang lahat pagkatapos ng space, gamitin ang alinman sa space ( ) owhitespace (\s) character upang mahanap ang unang espasyo at .* upang tumugma sa anumang mga character pagkatapos nito.

    Kung mayroon kang mga single-line na string na naglalaman lamang ng mga normal na espasyo (value 32 sa 7-bit na ASCII system) , hindi talaga mahalaga kung alin sa mga regex sa ibaba ang iyong ginagamit. Sa kaso ng mga multi-line na string, ito ay gumagawa ng pagkakaiba.

    Upang alisin ang lahat pagkatapos ng isang space character , gamitin ang regex na ito:

    Pattern : " .*"

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

    Aalisin ng formula na ito ang anumang bagay pagkatapos ng unang puwang sa bawat linya . Para maipakita nang tama ang mga resulta, tiyaking i-on ang Wrap Text.

    Upang tanggalin ang lahat pagkatapos ng whitespace (kabilang ang isang space, tab, carriage return at bagong linya), ang regex ay:

    Pattern : \s.*

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

    Dahil ang \s ay tumutugma sa ilang iba't ibang uri ng whitespace kabilang ang isang bagong linya (\n), tinatanggal ng formula na ito ang lahat pagkatapos ng unang puwang sa isang cell, gaano man karaming linya ang nasa loob nito.

    Regex upang alisin ang text pagkatapos ng partikular na character

    Gamit ang mga pamamaraan mula sa nakaraang halimbawa, maaari mong puksain ang text pagkatapos ng anumang character na iyong tinukoy.

    Upang hawakan ang bawat linya nang hiwalay:

    Generic na pattern : char.*

    Sa mga single-line na string, aalisin nito ang lahat pagkatapos ng char . Sa mga multi-line na string, isa-isang ipoproseso ang bawat linya dahil sa lasa ng VBA Regex, isang tuldok (.) ang tumutugma sa anumang karakter maliban sa isang bagongsimula ng isang string ^, tumutugma kami sa zero o higit pang mga non-space na character [^ ]* na agad na sinusundan ng isa o higit pang mga puwang na " +". Ang huling bahagi ay idinagdag upang maiwasan ang mga potensyal na nangungunang puwang sa mga resulta.

    Upang alisin ang teksto bago ang unang puwang sa bawat linya, ang formula ay nakasulat sa default na "lahat ng mga tugma" na mode ( instance_num inalis):

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

    Upang tanggalin ang text bago ang unang puwang sa unang linya, at iwanang buo ang lahat ng iba pang linya, ang instance_num argument ay nakatakda sa 1:

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

    Regex para alisin ang lahat bago ang character

    Ang pinakamadaling paraan upang alisin ang lahat ng text bago ang isang partikular na character ay sa pamamagitan ng paggamit ng regex ganito:

    Generic na pattern : ^[^char]*char

    Isinalin sa isang wika ng tao, sinasabi nitong: "mula sa simula ng isang string na naka-angkla ng ^ , tumugma sa 0 o higit pang mga character maliban sa char [^char]* hanggang sa unang paglitaw ng char .

    Halimbawa, upang tanggalin ang lahat ng teksto bago ang unang colon , gamitin ang regular na expression na ito:

    Pattern : ^[^:]*:

    Upang maiwasan ang mga nangungunang puwang sa mga resulta, magdagdag ng whitespace na character \s* sa wakas. Aalisin nito ang lahat g bago ang unang colon at gupitin ang anumang mga puwang pagkatapos nito:

    Pattern : ^[^:]*:\s*

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

    Tip. Bukod sa mga regular na expression, ang Excel ay may sariling paraan upang alisin ang teksto sa pamamagitan ng posisyon o tugma. Upang matutunan kung paano tuparin ang gawain gamit ang mga katutubong formula,pakitingnan ang Paano mag-alis ng text bago o pagkatapos ng isang character sa Excel.

    Regex para alisin ang lahat maliban sa

    Upang tanggalin ang lahat ng character sa isang string maliban sa mga gusto mong panatilihin, gumamit ng mga negated na klase ng character.

    Halimbawa, para alisin ang lahat ng character maliban sa maliliit na titik at mga tuldok, ang regex ay:

    Pattern : [^a-z\.]+

    Sa katunayan, magagawa natin nang wala ang + quantifier dito dahil pinapalitan ng ating function ang lahat nakahanap ng mga tugma. Mas pinapabilis lang ito ng quantifier - sa halip na pangasiwaan ang bawat indibidwal na character, papalitan mo ang isang substring.

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

    Regex upang alisin ang mga html na tag sa Excel

    Una, dapat tandaan na ang HTML ay hindi isang regular na wika, kaya ang pag-parse nito gamit ang mga regular na expression ay hindi ang pinakamahusay na paraan. Sabi nga, tiyak na makakatulong ang mga regexes sa pagtanggal ng mga tag sa iyong mga cell upang gawing mas malinis ang iyong dataset.

    Dahil palaging inilalagay ang mga html tag sa loob ng mga angle bracket , mahahanap mo ang mga ito gamit ang isa sa mga sumusunod na regexe.

    Negated class:

    Pattern : ]*>

    Dito, tinutugma namin ang isang pambungad na anggulo bracket, na sinusundan ng zero o higit pang paglitaw ng anumang character maliban sa closing angle bracket [^>]* hanggang sa pinakamalapit na closing angle bracket.

    Lazy search:

    Pattern :

    Dito, kami ay tumutugma anumang bagay mula sa unang pambungad na bracket hanggang sa unang pagsasara ng bracket. Pinipilit ng tandang pananong ang .* na tumugma sa kasing-kaunting mga characterlinya.

    Upang iproseso ang lahat ng linya bilang isang string:

    Generic na pattern : char(.

    Si Michael Brown ay isang dedikadong mahilig sa teknolohiya na may hilig sa pagpapasimple ng mga kumplikadong proseso gamit ang mga tool sa software. Sa higit sa isang dekada ng karanasan sa industriya ng tech, hinasa niya ang kanyang mga kasanayan sa Microsoft Excel at Outlook, pati na rin ang Google Sheets at Docs. Ang blog ni Michael ay nakatuon sa pagbabahagi ng kanyang kaalaman at kadalubhasaan sa iba, na nagbibigay ng madaling sundan na mga tip at mga tutorial para sa pagpapabuti ng pagiging produktibo at kahusayan. Isa ka mang batikang propesyonal o baguhan, nag-aalok ang blog ni Michael ng mahahalagang insight at praktikal na payo para masulit ang mahahalagang software tool na ito.