Daptar eusi
Dina tutorial ieu, anjeun bakal diajar kumaha ngagunakeun éksprési biasa dina Excel pikeun milarian sareng ngekstrak substring anu cocog sareng pola anu dipasihkeun.
Microsoft Excel nyayogikeun sababaraha pungsi pikeun nimba téks. ti sél. Fungsi-fungsi éta tiasa ngatasi seueur tantangan ékstraksi senar dina lembar kerja anjeun. Paling, tapi teu kabeh. Nalika fungsi téks titajong, ekspresi biasa datang pikeun nyalametkeun. Antosan… Excel henteu ngagaduhan fungsi RegEx! Leres, teu aya pungsi inbuilt. Tapi teu aya anu tiasa nyegah anjeun nganggo anu anjeun sorangan :)
Excel VBA Regex fungsi pikeun nimba string
Pikeun nambahkeun fungsi Regex Extract custom kana Excel anjeun, nempelkeun kodeu handap dina redaktur VBA. Pikeun ngaktifkeun éksprési biasa dina VBA, kami nganggo obyék Microsoft RegExp anu diwangun.
Fungsi Umum RegExpExtract(téks Salaku String , pola Salaku String , Pilihan instance_num Salaku Integer = 0, Pilihan match_case Salaku Boolean = True ) Taram text_matches () Salaku String Taram matches_index Salaku Integer Dina Kasalahan GoTo ErrHandl RegExpExtract = "" Atur regex = CreateObject ( "VBScript.RegExp") regex.pattern = pola regex.Global = Leres regex.MultiLine = Leres Lamun Leres = match_case Lajeng regex. ignorecase = Palsu Lain regex.ignorecase = Leres Tungtung Lamun Set cocog = regex.Execute (téks) Lamun 0 & lt; matches.Count Then If (0 = instance_num) Lajeng ReDim text_matches(matches.Count - 1, 0) Pikeun matches_index = 0 ToVBA RegExp, kuring ajak anjeun maca bagian salajengna anu ngabahas fungsi .NET Regex anu langkung kuat.Fungsi Regex dumasar .NET khusus pikeun ékstrak téks dina Excel
Beda sareng fungsi VBA RegExp anu bisa ditulis ku sagala pamaké Excel, .NET RegEx nyaeta realm pamekar. Microsoft .NET Framework ngadukung sintaksis ekspresi reguler anu lengkep anu cocog sareng Perl 5. Tulisan ieu moal ngajarkeun anjeun cara nyerat fungsi sapertos kitu (Kuring sanés programmer sareng henteu gaduh ide sakedik ngeunaan kumaha ngalakukeunana :)
Opat fungsi anu kuat anu diolah ku mesin .NET RegEx standar parantos ditulis ku pamekar urang sareng kalebet dina Ultimate Suite. Di handap, urang bakal nunjukkeun sababaraha kagunaan praktis tina fungsi nu dirancang husus pikeun ékstraksi téks dina Excel.
Tip. Kanggo inpo tentang sintaksis .NET Regex, mangga tingal .NET Regular Expression Language.
Kumaha cara nimba stings dina Excel nganggo ekspresi biasa
Anggap anjeun gaduh versi panganyarna tina Ultimate Suite dipasang, ékstraksi téks nganggo éksprési biasa nuju ka dua léngkah ieu:
- Dina tab Ablebits Data , dina grup Teks , klik Regex Tools .
- Dina panel Regex Tools , pilih sumber data, asupkeun pola Regex anjeun, tur pilih pilihan Extract . Pikeun kéngingkeun hasil salaku fungsi khusus, sanés nilai, pilih cék Selapkeun salaku rumus kotak. Saatos réngsé, klik tombol Ekstrak .
Hasilna bakal némbongan dina kolom anyar di sisi katuhu data asli anjeun:
Sintaksis AbblebitsRegexExtract
Pungsi khusus kami ngagaduhan sintaksis ieu:
AblebitsRegexExtract(reference, regular_expression)Dimana:
- Referensi (diperlukeun) - rujukan ka sél nu ngandung string sumber.
- Regular_expression (diperlukeun) - pola regex pikeun cocog.
Catetan penting! Fungsina ngan ukur tiasa dianggo dina mesin anu dipasang Ultimate Suite for Excel.
Catetan pamakean
Supaya kurva diajar anjeun langkung lancar sareng pangalaman anjeun langkung pikaresepeun, mangga perhatikeun poin ieu:
- Pikeun nyieun rumus, anjeun tiasa nganggo Regex Tools , atanapi dialog Excel Insert function , atanapi ngetik nami fungsi lengkep dina sél. Saatos rumus diselapkeun, anjeun tiasa ngatur (ngédit, nyalin atanapi mindahkeun) sapertos rumus asli.
- Pola anu anjeun lebetkeun dina panel Regex Tools nuju ka argumen ka-2. Éta ogé mungkin pikeun nyimpen ekspresi biasa dina sél misah. Dina hal ieu, ngan ukur nganggo rujukan sél pikeun argumen ka-2.
- Fungsi éta nimba cocok anu munggaran kapanggih .
- Sacara standar, fungsina nyaéta kasus. -sensitip . Pikeun nyocogkeun hurup-sensitip, paké pola (?i).
- Lamun hiji patandingan teu kapanggih, kasalahan #N/A nyaétabalik.
Regex pikeun nimba string antara dua karakter
Pikeun meunangkeun téks antara dua karakter, Anjeun bisa make grup nangkep atawa kasampak-sabudeureun.
Hayu nyebutkeun Anjeun keur pilari nimba téks antara kurung. Grup néwak nyaéta cara anu panggampangna.
Pola 1 : \[(.*?)\]
Kalayan tempoan positip sareng ningali ka hareup, hasilna bakal persis. sami-sami.
Pola 2 : (?<=\[)(.*?)(?=\])
Punten perhatoskeun yén grup panangkapan urang (.*?) ngalaksanakeun pilarian puguh pikeun téks antara dua kurung - ti mimiti [ nepi ka mimiti ]. Grup néwak tanpa tanda tanya (.*) bakal ngalakukeun pilarian rakus sareng néwak sadayana ti mimiti [ dugi ka terakhir ].
Kalayan pola dina A2, rumusna janten sapertos kieu:
=AblebitsRegexExtract(A5, $A$2)
Kumaha carana meunangkeun sakabeh patandingan
Saperti geus disebutkeun, fungsi AblebitsRegexExtract ngan bisa nimba hiji patandingan. Pikeun meunang sagala patandingan, anjeun tiasa nganggo fungsi VBA kami geus dibahas saméméhna. Tapi, aya hiji caveat - VBA RegExp henteu ngadukung néwak grup, janten pola di luhur bakal ngabalikeun karakter "wates" ogé, kurung dina kasus urang.
=TEXTJOIN(" ", TRUE, RegExpExtract(A5, $A$2))
Pikeun ngaleungitkeun tina tanda kurung, GANTIKAN ku senar kosong ("") nganggo rumus ieu:
=SUBSTITUTE(SUBSTITUTE(TEXTJOIN(", ", TRUE, RegExpExtract(A5, $A$2)), "]", ""),"[","")
Pikeun kabacaan anu langkung saé, kami nganggo koma pikeun pembatas.
Regex pikeun nimba téks antara dua senar
Pendekatan anu ku urang digarapnafsirkeun sacara harfiah).
Gumantung kana ekspresi biasa anu diasupkeun dina A2, rumus di handap bakal ngahasilkeun hasil anu béda:
=AblebitsRegexExtract(A5, $A$2)
Regex pikeun nimba ngaran domain lengkep sareng sadaya subdomain:
Regex pikeun nimba tingkat kadua domain tanpa subdomain:
Éta cara nimba bagéan téks dina Excel nganggo éksprési biasa. Abdi ngahaturkeun nuhun pikeun maca sareng ngarep-ngarep ningali anjeun dina blog kami minggu payun!
Unduh anu sayogi
Conto Ekstrak Excel Regex (file .xlsm)
Vérsi percobaan Ultimate Suite (file .exe)
\b(0?[0-9]matches.Count - 1 text_matches(matches_index, 0) = matches.Item(matches_index) Next matches_index RegExpExtract = text_matches Lain RegExpExtract = matches.Item(instance_num - 1) Tungtung Lamun Tungtung Lamun Kaluar Fungsi ErrHandl: RegVpExtract = CVErr() EndExtractUpami Anjeun gaduh sakedik pangalaman sareng VBA, pituduh pamake undak-usuk tiasa ngabantosan: Kumaha nyelapkeun kode VBA dina Excel.
Catetan. Pikeun fungsina tiasa dianggo, pastikeun pikeun nyimpen file anjeun salaku buku kerja anu diaktipkeun makro (.xlsm).
Sintaksis RegExpExtract
Pungsi RegExpExtract milarian string input pikeun niléy anu cocog sareng éksprési biasa sareng ékstrak hiji atanapi sadaya patandingan.
Pungsi ieu ngagaduhan sintaksis ieu. :
RegExpExtract(téks, pola, [instance_num], [match_case])Dimana:
- Teks (diperlukeun) - string téks pikeun néangan.
- Pola (diperlukeun) - ekspresi biasa pikeun cocog. Lamun disadiakeun langsung dina rumus, pola kudu diapit ku tanda petik ganda.
- Instance_num (opsional) - nomer séri anu nuduhkeun instansi mana nu bakal diekstrak. Upami disingkahkeun, mulangkeun sadaya patandingan anu kapendak (standar).
- Match_case (opsional) - nangtukeun naha cocog atanapi teu malire kasus téks. Lamun BENER atawa dileungitkeun (standar), cocog hal-sénsitip dipigawé; lamun FALSE - teu merhatikeun hurup leutik.
Pungsina jalan dina sakabéh vérsi Excel 365, Excel 2021, Excel2019, Excel 2016, Excel 2013 sareng Excel 2010.
4 hal anu anjeun kedah terang ngeunaan RegExpExtract
Pikeun ngagunakeun pungsi dina Excel anjeun sacara efektif, aya sababaraha hal penting anu kedah diperhatoskeun:
- Sacara standar, fungsina mulangkeun sadaya patandingan anu kapendak kana sél tatangga sapertos anu dipidangkeun dina conto ieu. Pikeun meunangkeun kajadian husus, asupkeun angka nu cocog kana argumen instance_num .
- Sacara standar, fungsina sénsitip hurup leutik . Pikeun nyocogkeun hal-teu sensitip, setel argumen match_case ka FALSE. Kusabab keterbatasan VBA, konstruk sensitip-huruf (?i) moal jalan.
- Upami pola anu sah teu kapendak , fungsina moal ngabalikeun nanaon (string kosong).
- Lamun pola teu valid , hiji #VALUE! aya kasalahan.
Saméméh anjeun mimiti ngagunakeun pungsi custom ieu dina lembar kerja anjeun, anjeun kudu ngarti naon éta sanggup, katuhu? Conto di handap nutupan sababaraha kasus pamakean umum sareng ngajelaskeun naha kabiasaan éta tiasa bénten dina Dynamic Array Excel (Microsoft 365 sareng Excel 2021) sareng Excel tradisional (2019 sareng versi anu langkung lami).
Catetan. conto kaluar regex ditulis pikeun dongeng susunan data basajan. Urang teu bisa ngajamin aranjeunna bakal dianggo flawlessly dina lembar kerja nyata anjeun. Anu gaduh pangalaman sareng regex bakal satuju yén nyerat ekspresi biasa mangrupikeun jalan anu teu aya tungtungna - ampir sok aya cara pikeun ngajantenkeuneta leuwih elegan atawa sanggup nanganan rentang lega data input.
Regex pikeun nimba angka tina string
Nuturkeun maksim dasar pangajaran "ti basajan ka kompléks", urang mimitian ku kasus pisan basajan: extracting angka tina string.
The Hal kahiji anu anjeun kedah mutuskeun nyaéta nomer mana anu badé dicandak: kahiji, panungtung, kajadian khusus atanapi sadaya nomer.
Ekstrak nomer kahiji
Ieu saderhana sapertos regex tiasa. Kumargi \d hartosna angka naon waé ti 0 dugi ka 9, sareng + hartosna hiji atanapi sababaraha kali, éksprési biasa urang nyandak bentuk ieu:
Pola : \d+
Set instance_num ka 1 sarta anjeun bakal meunang hasil nu dipikahoyong:
=RegExpExtract(A5, "\d+", 1)
Dimana A5 mangrupa string aslina.
Pikeun genah, anjeun bisa ngasupkeun pola dina sél nu geus disetel ($A$2 ) jeung konci alamatna ku tanda $:
=RegExpExtract(A5, $A$2, 1)
Kéngingkeun angka panungtungan
Pikeun nimba nomer panungtungan dina string , ieu pola anu digunakeun:
Pola : (\d+)(?!.*\d)
Ditarjamahkeun kana basa manusa , eta nyebutkeun: manggihan hiji angka nu teu dituturkeun (mana, teu ngan geuwat) ku sagala angka séjén. Pikeun ngécéskeun ieu, urang ngagunakeun lookahead négatip (?!.*\d), nu hartina di katuhu pola teu kudu aya angka séjén (\d) paduli sabaraha karakter sejenna sateuacan eta.
=RegExpExtract(A5, "(\d+)(?!.*\d)")
Tips:
- Pikeun meunangkeun kajadian husus , paké \d+ pikeun pola jeung séri anu luyuangka pikeun instance_num .
- Rumus pikeun nimba sadaya angka dibahas dina conto salajengna.
Regex pikeun nimba sadaya patandingan
Ngadorong conto urang sakedap deui, anggap anjeun hoyong kéngingkeun sadaya nomer tina senar, sanés ngan ukur hiji.
Sapertos anjeun émut, jumlah patandingan anu diekstrak dikawasa ku pilihan instance_num argumen. Standarna nyaéta sadaya patandingan, janten anjeun ngan saukur ngaleungitkeun parameter ieu:
=RegExpExtract(A2, "\d+")
Rumusna dianggo saé pikeun sél tunggal, tapi paripolahna béda dina Dynamic Array Excel sareng versi non-dinamis.
Excel 365 sareng Excel 2021
Kusabab dukungan pikeun susunan dinamis, rumus biasa sacara otomatis asup ka saloba sél anu diperyogikeun pikeun mintonkeun sadaya hasil anu diitung. Dina watesan Excel, ieu disebut rentang spilled:
Excel 2019 jeung handap
Dina Excel pre-dinamis, rumus di luhur bakal balik ngan hiji patandingan. Pikeun meunang sababaraha patandingan, anjeun kedah ngadamel rumus Asép Sunandar Sunarya. Jang ngalampahkeun ieu, pilih sauntuyan sél, ketik rumus, teras pencét Ctrl + Shift + Enter pikeun ngalengkepan éta.
Karugian tina pendekatan ieu nyaéta sakumpulan kasalahan #N/A anu muncul dina "sél tambahan" . Hanjakalna, teu aya anu tiasa dilakukeun ngeunaan éta (sanés IFERROR atanapi IFNA tiasa ngalereskeunana, sayang).
Ekstrak sadaya patandingan dina hiji sél
Nalika ngolah kolom data, pendekatan di luhur écés moal jalan. Dina hal ieu, hiji solusi idéalbakal mulangkeun sadaya patandingan dina sél tunggal. Jang ngalampahkeunana, layankeun hasil RegExpExtract kana fungsi TEXTJOIN sareng pisahkeun sareng pembatas naon waé anu anjeun pikahoyong, sebutkeun koma sareng spasi:
=TEXTJOIN(", ", TRUE, RegExpExtract(A5, "\d+"))
Catetan. Kusabab pungsi TEXTJOIN ngan sadia dina Excel pikeun Microsoft 365, Excel 2021 jeung Excel 2019, rumusna moal jalan dina vérsi nu leuwih heubeul.
Regex pikeun nimba téks tina string
Ngaékstrak téks ti string alpanumérik mangrupakeun tugas anu cukup nangtang dina Excel. Kalayan regex, janten sagampil pai. Ngan anggo kelas anu dinegasi pikeun cocog sareng sadayana anu sanés angka.
Pola : [^\d]+
Pikeun kéngingkeun substring dina sél individu (rentang tumpahan) , rumusna nyaéta:
=RegExpExtract(A5, "[^\d]+")
Pikeun kaluaran sakabéh patandingan kana hiji sél, sarang fungsi RegExpExtract dina TEXTJOIN siga kieu:
=TEXTJOIN("", TRUE, RegExpExtract(A5, "[^\d]+"))
Regex ka nimba alamat surelek tina string
Pikeun narik alamat surelek tina senar nu ngandung loba informasi béda, tulis ekspresi biasa nu réplikasi struktur alamat surélék.
Pola : [\w\.\-]+@[A-Za-z0-9\.\-]+\.[A-Za-z]{2,24}
Ngarecah regex ieu , ieu naon anu urang meunang:
- [\w\.\-]+ nyaéta ngaran pamaké nu bisa ngawengku 1 atawa leuwih karakter alfanumerik, underscores, titik jeung hyphens.
- @ simbol
- [A-Za-z0-9\.\-]+ nyaéta ngaran domain anu diwangun ku: hurup gedé jeung leutik, angka, tanda hubung jeung titik (bisitina subdomain). Underscores henteu diidinan di dieu, janten 3 set karakter anu béda (sapertos A-Z a-z sareng 0-9) dianggo gaganti \w anu cocog sareng hurup, angka atanapi garis handap.
- \.[A-Za-z ]{2,24} nyaéta domain tingkat luhur. Diwangun ku hiji titik dituturkeun ku hurup gede jeung hurup leutik. Kalolobaan domain tingkat luhur panjangna 3-hurup (misalna .com .org, .edu, jsb), tapi dina tiori bisa ngandung ti 2 nepi ka 24 hurup (TLD kadaptar pangpanjangna).
Anggap string dina A5 jeung pola dina A2, rumus pikeun nimba alamat surélék nyaéta:
=RegExpExtract(A5, $A$2)
Regex pikeun nimba domain tina email
Nalika eta datang ka extracting domain email, pamikiran mimiti nu datang ka pikiran ngagunakeun grup nangkep pikeun manggihan téks nu langsung nuturkeun karakter @.
Pola : @([A-Za-z0 -9\.\-]+\.[A-Za-z]{2,24})
Sajikeun kana fungsi RegExp kami:
=RegExpExtract(A5, "@([A-Za-z0-9\.\-]+\.[A-Za-z]{2,24})")
Jeung Anjeun bakal nampi hasil ieu:
Kalayan éksprési biasa klasik, naon waé di luar grup panangkepan henteu kalebet dina ékstraksi. Teu aya anu terang naha VBA RegEx jalanna béda sareng ngarebut "@" ogé. Pikeun ngaleungitkeunana, anjeun tiasa miceun karakter kahiji tina hasil ku cara ngagentos ku senar kosong.
=REPLACE(RegExpExtract(A5, "@([a-z\d][a-z\d\-\.]*\.[a-z]{2,})", 1, FALSE), 1, 1, "")
Ekspresi biasa pikeun ngaékstrak nomer telepon
Nomer telepon tiasa ditulis ku sababaraha cara anu béda-béda, naha éta ampir teu mungkin pikeun ngahasilkeun solusi anu tiasa dianggo dina sadayana(\d{4}ti string
A ekspresi biasa pikeun extracting tanggal gumantung kana format nu tanggal muncul dina string. Contona:
Pikeun nimba tanggal kawas 1/1/21 atawa 01/01/2021, regexna nyaéta: \d{1,2}\/\d{1,2}\/(\d {4}kaayaan. Tapi, anjeun tiasa nyerat sadaya format anu dianggo dina set data anjeun sareng nyobian cocog sareng aranjeunna.
Pikeun conto ieu, urang badé nyiptakeun regex anu bakal nyandak nomer telepon dina salah sahiji format ieu:
(123) 345-6789 (123) 345 6789 (123)3456789 123- 345-6789 | 123.345.6789 123 345 6789 1233456789 |
Pola : \(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b
- Bagian kahiji \(?\d{3} cocog jeung nol atawa hiji kurung bukaan dituturkeun ku tilu digit d{3}.
- Bagian [-\. \)]* hartina karakter naon waé dina kurung kuadrat anu muncul 0 kali atawa leuwih: tanda hubung, titik, spasi atawa kurung panutup.
- Salajengna, urang gaduh tilu digit deui d{3} dituturkeun ku sagala hyphen, titik atawa spasi [-\. ]? muncul 0 atawa 1 kali.
- Sanggeus éta, aya grup opat digit \d{4}.
- Ahirna, aya wates kecap \b nangtukeun yén nomer telepon kami. nu ditéang teu bisa jadi bagian tina angka nu leuwih gede.
Rumus lengkepna kieu:
=RegExpExtract(A5, "\(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b")
Perhatikeun yén regex di luhur bisa ngabalikeun sababaraha hasil positif palsu sapertos 123) 456 7899 atanapi (123 456 7899. Versi di handap ieu ngalereskeun masalah ieu. Tapi, sintaksis ieu ngan ukur tiasa dianggo dina fungsi VBA RegExp, sanés dina ekspresi biasa klasik.
Pola : (\(\d{3}\)kaluar pikeun narik kaluar téks antara dua karakter ogé bakal dianggo pikeun nimba téks antara dua string.
Contona, pikeun meunangkeun sagalana antara "test 1" jeung "test 2", make ekspresi biasa di handap ieu.
Pola : test 1(.*?)test 2
Rumus lengkepna nyaéta:
=AblebitsRegexExtract(A5, "test 1(.*?)test 2")
Regex pikeun nimba domain tina URL
Sanajan nganggo éksprési biasa, ékstraksi ngaran domain tina URL sanés tugas anu sepele. Unsur konci anu ngalakukeun trik nyaéta grup non-nangkep. Gumantung kana tujuan pamungkas anjeun, pilih salah sahiji regexes di handap.
Pikeun meunangkeun ngaran domain lengkep kaasup subdomain
Pola : (?: https?\: