Isi kandungan
Tidak boleh faham mengapa ungkapan biasa tidak disokong dalam formula Excel? Kini, ia adalah :) Dengan fungsi tersuai kami, anda boleh mencari, menggantikan, mengekstrak dan mengalih keluar rentetan yang sepadan dengan corak tertentu dengan mudah.
Pada pandangan pertama, Excel mempunyai semua yang anda perlukan untuk rentetan teks manipulasi. Hmm… bagaimana dengan ungkapan biasa? Oops, tiada fungsi Regex terbina dalam dalam Excel. Tetapi tiada siapa yang mengatakan bahawa kita tidak boleh mencipta ungkapan kita sendiri :)
Apakah ungkapan biasa?
Ungkapan biasa (aka regex atau regexp ) ialah jujukan aksara yang dikodkan khas yang mentakrifkan corak carian. Menggunakan corak itu, anda boleh mencari gabungan aksara yang sepadan dalam rentetan atau mengesahkan input data. Jika anda biasa dengan tatatanda kad bebas, anda boleh menganggap regex sebagai versi kad bebas lanjutan.
Ungkapan biasa mempunyai sintaksnya sendiri yang terdiri daripada aksara khas, pengendali dan binaan. Contohnya, [0-5] sepadan dengan mana-mana digit tunggal daripada 0 hingga 5.
Ungkapan biasa digunakan dalam banyak bahasa pengaturcaraan termasuk JavaScript dan VBA. Yang terakhir ini mempunyai objek RegExp khas, yang akan kami gunakan untuk mencipta fungsi tersuai kami.
Adakah Excel menyokong regex?
Malangnya, tiada fungsi Regex terbina dalam Excel. Untuk dapat menggunakan ungkapan biasa dalam formula anda, anda perlu mencipta fungsi yang ditentukan pengguna anda sendiri (VBAargumen:
=IF(RegExpMatch(A5, $A$2), "Yes", "No")
Untuk lebih banyak contoh formula, sila lihat:
- Cara memadankan rentetan menggunakan ungkapan biasa
- Pengesahan Data Excel dengan regex
Fungsi Ekstrak Regex Excel
Fungsi RegExpExtract mencari subrentetan yang sepadan dengan ungkapan biasa dan mengekstrak semua padanan atau padanan tertentu.
RegExpExtract(teks, corak, [instance_num], [match_case])Di mana:
- Teks (diperlukan) - rentetan teks untuk dicari dalam.
- Corak (diperlukan) - ungkapan biasa untuk dipadankan.
- Instance_num (pilihan) - nombor siri yang menunjukkan tika yang ekstrak. Jika ditinggalkan, mengembalikan semua padanan yang ditemui (lalai).
- Match_case (pilihan) - mentakrifkan sama ada untuk memadankan (BENAR atau ditinggalkan) atau mengabaikan huruf teks (FALSE).
Anda boleh mendapatkan kod fungsi di sini.
Contoh: cara mengekstrak rentetan menggunakan ungkapan biasa
Mengambil contoh kita lebih jauh, mari kita ekstrak nombor invois. Untuk ini, kami akan menggunakan regex yang sangat mudah yang sepadan dengan mana-mana nombor 7 digit:
Corak : \b\d{7}\b
Put corak dalam A2 dan anda akan menyelesaikan tugas dengan formula padat dan elegan ini:
=RegExpExtract(A5, $A$2)
Jika corak dipadankan, formula mengeluarkan nombor invois, jika tiada padanan ditemui - tiada apa yang dikembalikan.
Untuk lebih banyak contoh, sila lihat: Cara mengekstrak rentetan dalam Excelmenggunakan regex.
Fungsi Ganti Regex Excel
Fungsi RegExpReplace menggantikan nilai yang sepadan dengan regex dengan teks yang anda tentukan.
RegExpReplace(teks, corak, penggantian , [instance_num], [match_case])Di mana:
- Teks (diperlukan) - rentetan teks untuk dicari.
- Corak (diperlukan) - ungkapan biasa untuk dipadankan.
- Penggantian (diperlukan) - teks untuk menggantikan subrentetan yang sepadan dengannya.
- Instance_num (pilihan) - contoh untuk menggantikan. Lalai ialah "semua padanan".
- Match_case (pilihan) - mengawal sama ada untuk memadankan (BENAR atau ditinggalkan) atau mengabaikan huruf teks (FALSE).
Kod fungsi tersedia di sini.
Contoh: cara menggantikan atau mengalih keluar rentetan menggunakan regex
Sesetengah rekod kami mengandungi nombor kad kredit. Maklumat ini adalah sulit, dan anda mungkin mahu menggantikannya dengan sesuatu atau memadam sama sekali. Kedua-dua tugas boleh dicapai dengan bantuan fungsi RegExpReplace . Bagaimana? Dalam senario kedua, kami akan menggantikan dengan rentetan kosong.
Dalam jadual sampel kami, semua nombor kad mempunyai 16 digit, yang ditulis dalam 4 kumpulan yang diasingkan dengan ruang. Untuk mencarinya, kami meniru corak menggunakan ungkapan biasa ini:
Corak : \b\d{4} \d{4} \d{4} \d{4}\ b
Untuk penggantian, rentetan berikut digunakan:
Penggantian : XXXX XXXX XXXXXXXX
Dan berikut ialah formula lengkap untuk menggantikan nombor kad kredit dengan maklumat tidak sensitif:
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX")
Dengan teks regex dan penggantian dalam sel berasingan ( A2 dan B2), formula berfungsi sama baik:
Dalam Excel, "mengalih keluar" ialah kes tertentu "menggantikan". Untuk mengalih keluar nombor kad kredit, hanya gunakan rentetan kosong ("") untuk argumen penggantian :
=RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "")
Petua. Untuk mendapatkan pelantar baris kosong dalam hasil carian, anda boleh menggunakan fungsi RegExpReplace yang lain seperti yang ditunjukkan dalam contoh ini: Cara mengalih keluar baris kosong menggunakan regex.
Untuk maklumat lanjut, sila lihat:
- Cara menggantikan rentetan dalam Excel menggunakan regex
- Cara mengalih keluar rentetan menggunakan regex
- Cara menanggalkan ruang putih menggunakan regex
Alat Regex untuk dipadankan, ekstrak , ganti dan alih keluar subrentetan
Pengguna Suite Ultimate kami boleh mendapatkan semua kuasa ungkapan biasa tanpa memasukkan satu baris kod dalam buku kerja mereka. Semua kod yang diperlukan ditulis oleh pembangun kami dan disepadukan dengan lancar dalam Excel anda semasa pemasangan.
Tidak seperti fungsi VBA yang dibincangkan di atas, fungsi Ultimate Suite adalah berasaskan .NET, yang memberikan dua kelebihan utama:
- Anda boleh menggunakan ungkapan biasa dalam buku kerja .xlsx biasa tanpa menambah sebarang kod VBA dan perlu menyimpannya sebagai fail berdaya makro.
- Enjin Regex NET menyokong klasik berciri penuhungkapan biasa, yang membolehkan anda membina corak yang lebih canggih.
Cara menggunakan Regex dalam Excel
Dengan Suite Ultimate dipasang, menggunakan ungkapan biasa dalam Excel adalah semudah dua langkah ini :
- Pada tab Ablebits Data , dalam kumpulan Teks , klik Regex Tools .
- Pada anak tetingkap Regex Tools , lakukan perkara berikut:
- Pilih data sumber.
- Masukkan corak regex anda.
- Pilih pilihan yang diingini: Padankan , Ekstrak , Alih keluar atau Ganti .
- Untuk mendapatkan hasil sebagai formula dan bukan nilai, pilih kotak semak Sisipkan sebagai formula .
- Tekan butang tindakan.
Contohnya, untuk mengalih keluar nombor kad kredit daripada sel A2:A6, kami mengkonfigurasi tetapan ini:
Secara tiga kali, fungsi AblebitsRegex akan dimasukkan dalam lajur baharu di sebelah kanan asal anda data. Dalam kes kami, formulanya ialah:
=AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4}\b")
Setelah formula itu ada, anda boleh mengedit, menyalin atau mengalihkannya seperti mana-mana formula asli.
Cara untuk memasukkan formula Regex terus dalam sel
Fungsi AblebitsRegex juga boleh dimasukkan terus dalam sel tanpa menggunakan antara muka tambahan. Begini caranya:
- Klik butang fx pada bar formula atau Fungsi Sisipkan pada tab Formula .
- Dalam kotak dialog Insert Function , pilih AblebitsUDFs kategori, pilih fungsi yang diminati dan klik OK.
- Tentukan hujah fungsi seperti biasa anda lakukan dan klik OK. Selesai!
Untuk mendapatkan maklumat lanjut, sila lihat Alat Regex untuk Excel.
Begitulah cara menggunakan ungkapan biasa untuk memadankan, mengekstrak, menggantikan dan mengalih keluar teks dalam sel Excel. Saya mengucapkan terima kasih kerana membaca dan berharap dapat berjumpa anda di blog kami minggu hadapan!
Muat turun yang tersedia
Excel Regex - contoh formula (.xlsm file)
Ultimate Suite - versi percubaan (fail .exe)
atau berasaskan .NET) atau pasang alat pihak ketiga yang menyokong regex.Helaian cheat Excel Regex
Sama ada corak regex sangat mudah atau sangat canggih, ia dibina menggunakan sintaks biasa. Tutorial ini tidak bertujuan untuk mengajar anda ungkapan biasa. Untuk ini, terdapat banyak sumber dalam talian, daripada tutorial percuma untuk pemula kepada kursus premium untuk pengguna lanjutan.
Di bawah kami menyediakan rujukan pantas kepada corak RegEx utama yang akan membantu anda memahami asasnya. Ia juga boleh berfungsi sebagai helaian panduan anda apabila mengkaji contoh lanjut.
Jika anda selesa dengan ungkapan biasa, anda boleh terus ke fungsi RegExp.
Watak
Ini ialah corak yang paling kerap digunakan untuk memadankan aksara tertentu.
Corak | Penerangan | Contoh | Padanan |
. | Watak kad liar: sepadan dengan mana-mana aksara kecuali pemisah baris | .ot | titik , panas , periuk , @ot |
\d | Aksara digit: mana-mana digit tunggal dari 0 hingga 9 | \d | Dalam a1b , sepadan dengan 1 |
\D | Mana-mana aksara yang BUKAN digit | \D | Dalam a1b , sepadan dengan a dan b |
\s | Watak ruang putih: ruang, tab, baris baharu dan pemulangan gerabak | .\s. | Dalam 3 sen , sepadan dengan 3 c |
\S | Mana-manaaksara bukan ruang putih | \S+ | Dalam 30 sen , sepadan dengan 30 dan sen |
\w | Aksara perkataan: mana-mana huruf ASCII, digit atau garis bawah | \w+ | Dalam 5_cats*** , sepadan dengan 5_cats |
\W | Mana-mana aksara yang BUKAN aksara abjad angka atau garis bawah | \W+ | Dalam 5_cats*** , sepadan dengan *** |
\t | Tab | ||
\n | Baris baharu | \n\d+ | Dalam baris dua rentetan di bawah, sepadan dengan 10 5 kucing 10 anjing |
\ | Melepaskan maksud istimewa watak, jadi anda boleh carinya | \. \w+\. | Melepaskan titik supaya anda boleh mencari huruf "." aksara dalam rentetan En. , Puan , Prof. |
Kelas aksara
Menggunakan corak ini, anda boleh memadankan elemen set aksara yang berbeza.
Corak | Penerangan | Contoh | Padan |
[aksara] | Padan dengan mana-mana aksara tunggal dalam kurungan | d[oi]g | anjing dan gali |
[^aksara] | Padan mana-mana aksara tunggal TIDAK dalam kurungan | d[^oi]g | Padan dengan dag, dug , d1g Tidak sepadan dengan anjing dan gali |
[dari–ke] | Padan dengan mana-mana aksara dalam julat antarakurungan | [0-9] [a-z] [A-Z] | Mana-mana digit tunggal dari 0 hingga 9 Mana-mana huruf kecil tunggal Mana-mana huruf besar tunggal |
Pengkuantiti
Pengkuantiti ialah ungkapan khas yang menentukan bilangan aksara untuk dipadankan. Pengkuantiti sentiasa digunakan pada aksara sebelum itu.
Corak | Penerangan | Contoh | Padanan |
* | Sifar atau lebih kejadian | 1a* | 1, 1a , 1aa, 1aaa , dsb. |
+ | Satu atau lebih kejadian | po+ | Dalam periuk , sepadan dengan po Dalam buruk , sepadan dengan poo |
? | Sifar atau satu kejadian | roa?d | jalan, rod |
*? | Sifar atau lebih banyak kejadian, tetapi sesedikit mungkin | 1a*? | Dalam 1a , 1aa dan 1aaa , sepadan 1a |
+? | Satu atau lebih kejadian, tetapi sesedikit mungkin | po+? | Dalam periuk dan buruk , sepadan dengan po |
?? | Sifar atau satu kejadian , tetapi sesedikit mungkin | roa?? | Dalam jalan dan rod , sepadan dengan ro |
{n} | Padan dengan corak sebelumnya n kali | \d{3} | Tepat 3 digit |
{n ,} | Padan dengan corak sebelumnya n atau lebih banyak kali | \d{3,} | 3 digit atau lebih |
{n,m} | Padanan dengancorak terdahulu antara n dan m kali | \d{3,5} | Daripada 3 hingga 5 digit |
Mengumpulkan
Konstruk pengelompokan digunakan untuk menangkap subrentetan daripada rentetan sumber, jadi anda boleh melakukan beberapa operasi dengannya.
Sintaks | Penerangan | Contoh | Padanan |
(corak) | Kumpulan penangkapan: menangkap subrentetan yang sepadan dan memberikannya nombor ordinal | (\d+) | Dalam 5 kucing dan 10 anjing , tangkap 5 (kumpulan 1) dan 10 (kumpulan 2) |
(?:pattern) | Kumpulan tidak menangkap: sepadan dengan kumpulan tetapi tidak menangkapnya | (\d+)(?: anjing) | Dalam 5 kucing dan 10 anjing , menangkap 10 |
\1 | Kandungan kumpulan 1 | (\d+)\+(\d+)=\2\+\1 | Padan dengan 5+10=10+5 dan tangkapan 5 dan 10 , yang berada dalam menangkap kumpulan |
\2 | Kandungan kumpulan 2 |
Sauh
Sauh menentukan kedudukan dalam rentetan input tempat untuk mencari padanan.
Sauh | Penerangan | Contoh | Padanan |
^ | Permulaan rentetan Nota: [^kurung dalam] bermaksud "bukan" | ^\d+ | Sebarang bilangan digit pada permulaan rentetan. Dalam 5 kucing dan 10 anjing , sepadan dengan 5 |
$ | Tamat rentetan | \d+$ | Sebarang bilangan digit di hujung rentetan. Dalam 10Y |
(?<=) | Pandangan positif di belakang | (?<=Y)X | Padanan dengan ungkapan X apabila ia didahului oleh Y (iaitu jika terdapat Y di belakang X) |
(? | Pandangan negatif di belakang | (? | Padankan ungkapan X apabila ia TIDAK didahului oleh Y |
Sekarang anda mengetahui perkara yang penting, mari kita beralih ke bahagian yang paling menarik - menggunakan regex pada data sebenar untuk menghuraikan rentetan dan mencari maklumat yang diperlukan. Jika anda memerlukan butiran lanjut tentang sintaks, panduan Microsoft tentang Regular Expression Language mungkin berguna.
Fungsi RegEx Tersuai untuk Excel
Seperti yang telah disebutkan, Microsoft Excel tidak mempunyai fungsi RegEx terbina dalam. Untuk mendayakan ungkapan biasa, kami telah mencipta tiga fungsi VBA tersuai (aka fungsi yang ditentukan pengguna). Anda boleh menyalin kod daripada halaman yang dipautkan di bawah atau daripada sampel kami buku kerja, dan kemudian tampal dalam fail Excel anda sendiri.
Cara VBA RegExp berfungsi
Bahagian ini menerangkan mekanik dalaman dan mungkin int memberikan kepada mereka yang ingin mengetahui dengan tepat apa yang berlaku di bahagian belakang.
Untuk mula menggunakan ungkapan biasa dalam VBA, anda perlu sama ada mengaktifkan perpustakaan rujukan objek RegEx atau menggunakan fungsi CreateObject. Untuk menjimatkan masalah anda menetapkan rujukan dalam editor VBA, kami memilih pendekatan yang terakhir.
Objek RegExp mempunyai 4 sifat:
- Corak - adalah corak untuk dipadankan dalam rentetan input.
- Global - mengawal sama ada untuk mencari semua padanan dalam rentetan input atau hanya yang pertama. Dalam fungsi kami, ia ditetapkan kepada True untuk mendapatkan semua padanan .
- MultiLine - menentukan sama ada untuk memadankan corak merentas pemisah baris dalam rentetan berbilang baris atau hanya dalam baris pertama. Dalam kod kami, ia ditetapkan kepada True to search dalam setiap baris .
- IgnoreCase - mentakrifkan sama ada ungkapan biasa sensitif huruf besar-kecil (lalai) atau huruf besar- tidak sensitif (ditetapkan kepada Benar). Dalam kes kami, itu bergantung pada cara anda mengkonfigurasi parameter match_case pilihan. Secara lalai, semua fungsi adalah sensitif huruf besar/kecil .
Penghadan RegExp VBA
Excel VBA melaksanakan corak regex yang penting, tetapi ia tidak mempunyai banyak ciri lanjutan tersedia dalam .NET, Perl, Java dan enjin regex lain. Contohnya, VBA RegExp tidak menyokong pengubah suai sebaris seperti (?i) untuk padanan tidak sensitif huruf besar atau (?m) untuk mod berbilang baris, lihat di belakang, kelas POSIX, untuk menamakan beberapa.
Excel Regex Fungsi Padanan
Fungsi RegExpMatch mencari rentetan input untuk teks yang sepadan dengan ungkapan biasa dan mengembalikan BENAR jika padanan ditemui, FALSE sebaliknya.
RegExpMatch(teks, corak, [ match_case])Di mana:
- Teks (diperlukan) - satu atau lebih rentetan untuk dicari.
- Corak ( diperlukan) - yang biasaungkapan untuk dipadankan.
- Match_case (pilihan) - jenis padanan. BENAR atau ditinggalkan - sensitif huruf besar-besaran; FALSE - case-insensitive
Kod fungsi ada di sini.
Contoh: cara menggunakan ungkapan biasa untuk memadankan rentetan
Dalam set data di bawah, katakan anda mahu untuk mengenal pasti entri yang mengandungi kod SKU.
Memandangkan setiap SKU bermula dengan 2 huruf besar, diikuti dengan tanda sempang, diikuti dengan 4 digit, anda boleh memadankannya menggunakan ungkapan berikut.
Corak : \b[A-Z]{2}-\d{4}\b
Di mana [A-Z]{2} bermaksud mana-mana 2 huruf besar dari A hingga Z dan \d{4 } bermaksud mana-mana 4 digit daripada 0 hingga 9. Sempadan perkataan \b menunjukkan bahawa SKU ialah perkataan yang berasingan dan bukan sebahagian daripada rentetan yang lebih besar.
Dengan corak yang ditetapkan, mula menaip formula seperti biasa anda lakukan , dan nama fungsi akan muncul dalam senarai yang dicadangkan oleh AutoComplete Excel:
Dengan mengandaikan rentetan asal dalam A5, formulanya adalah seperti berikut:
=RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")
Untuk kemudahan, anda boleh memasukkan ungkapan biasa dalam sel yang berasingan dan menggunakan rujukan mutlak ($A$2) untuk hujah corak t. Ini memastikan bahawa alamat sel akan kekal tidak berubah apabila anda menyalin formula ke sel lain:
=RegExpMatch(A5, $A$2)
Untuk memaparkan label teks anda sendiri dan bukannya TRUE dan FALSE, sarang RegExpMatch dalam fungsi IF dan nyatakan teks yang dikehendaki dalam value_if_true dan value_if_false tambah 5 memberikan 15 , padanan 15
Konstruk bergantian (OR)
Operan bergantian mendayakan logik OR, jadi anda boleh memadankan sama ada elemen ini atau itu.
Bina | Perihalan | Contoh | Padanan |