Isi kandungan
Dalam rentetan di bawah, katakan anda mahu memadamkan nombor pesanan pertama. Semua nombor sedemikian bermula dengan tanda cincang (#) dan mengandungi tepat 5 digit. Jadi, kita boleh mengenal pasti mereka menggunakan regex ini:
Corak : #\d{5}\b
Perkataan sempadan \b menentukan bahawa subrentetan yang sepadan tidak boleh sebahagian daripada rentetan yang lebih besar seperti #10000001.
Untuk mengalih keluar semua padanan, hujah instance_num tidak ditakrifkan:
=RegExpReplace(A5, "#\d{5}\b", "")
Untuk menghapuskan hanya kejadian pertama, kami menetapkan argumen instance_num kepada 1:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex untuk mengalih keluar aksara tertentu
Untuk menanggalkan aksara tertentu daripada rentetan, cuma tulis semua aksara yang tidak diingini dan pisahkan dengan bar menegaksintaks bebas daripada pengehadan RegExp VBA, dan kedua, tidak perlu memasukkan sebarang kod VBA dalam buku kerja anda kerana semua penyepaduan kod dilakukan oleh kami di bahagian belakang.
Bahagian tugas anda adalah untuk membina ungkapan biasa dan sajikannya kepada fungsi :) Biar saya tunjukkan kepada anda cara melakukannya pada contoh praktikal.
Cara mengalih keluar teks dalam kurungan dan kurungan menggunakan regex
Dalam rentetan teks yang panjang, maklumat yang kurang penting selalunya disertakan dalam [kurung] dan (kurung). Bagaimanakah anda mengalih keluar butiran yang tidak berkaitan yang menyimpan semua data lain?
Malah, kami telah membina regex yang serupa untuk memadamkan teg html, iaitu teks dalam kurungan sudut. Jelas sekali, kaedah yang sama akan berfungsi untuk kurungan segi empat sama dan bulat juga.
Corak : (\(.*?\))
Pernahkah anda terfikir betapa hebatnya Excel jika seseorang boleh memperkayakan kotak alatnya dengan ungkapan biasa? Kami bukan sahaja memikirkan tetapi mengusahakannya :) Dan kini, anda boleh menambah fungsi RegEx yang menarik ini pada buku kerja anda sendiri dan memadamkan subrentetan yang sepadan dengan corak dalam masa yang singkat!
Minggu lepas, kami melihat tentang cara menggunakan ungkapan biasa untuk menggantikan rentetan dalam Excel. Untuk ini, kami mencipta fungsi Ganti Regex tersuai. Ternyata, fungsi itu melangkaui penggunaan utamanya dan bukan sahaja boleh menggantikan rentetan tetapi juga mengeluarkannya. Bagaimana mungkin? Dari segi Excel, mengalih keluar nilai tidak lain hanyalah menggantikannya dengan rentetan kosong, sesuatu yang fungsi Regex kami sangat bagus!
Fungsi RegExp VBA untuk mengalih keluar subrentetan dalam Excel
Seperti yang kita semua tahu, ungkapan biasa tidak disokong dalam Excel secara lalai. Untuk membolehkannya, anda perlu mencipta fungsi anda sendiri yang ditentukan pengguna. Berita baiknya ialah fungsi sedemikian telah pun ditulis, diuji dan sedia untuk digunakan. Apa yang anda perlu lakukan ialah menyalin kod ini, tampalkannya dalam editor VBA anda, dan kemudian simpan fail anda sebagai buku kerja yang didayakan makro (.xlsm).
Fungsi ini mempunyai sintaks berikut:
RegExpReplace(teks, corak, penggantian, [instance_num], [match_case])Tiga argumen pertama diperlukan, dua argumen terakhir adalah pilihan.
Di mana:
- Teks - rentetan teks untuk dicarimungkin sehingga ia menjumpai kurungan penutup.
Mana-mana corak yang anda pilih, hasilnya akan sama sekali.
Sebagai contoh, untuk mengalih keluar semua teg html daripada rentetan dalam A5 dan meninggalkan teks, formulanya ialah:
=RegExpReplace(A5, "]*>", "")
Atau anda boleh menggunakan pengkuantiti malas seperti yang ditunjukkan dalam tangkapan skrin:
Penyelesaian ini berfungsi dengan sempurna untuk teks tunggal (baris 5 - 9). Untuk berbilang teks (baris 10 - 12), hasilnya boleh dipersoalkan - teks daripada tag yang berbeza digabungkan menjadi satu. Adakah ini betul atau tidak? Saya takut, ia bukan sesuatu yang boleh diputuskan dengan mudah - semuanya bergantung pada pemahaman anda tentang hasil yang diinginkan. Sebagai contoh, dalam B11, hasil "A1" dijangka; semasa dalam B10, anda mungkin mahu "data1" dan "data2" dipisahkan dengan ruang.
Untuk mengalih keluar teg html dan memisahkan teks yang tinggal dengan ruang, anda boleh meneruskan dengan cara ini:
- Ganti teg dengan ruang " ", bukan rentetan kosong:
=RegExpReplace(A5, "]*>", " ")
- Kurangkan berbilang ruang kepada satu aksara ruang:
=RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")
- Pangkas ruang hadapan dan belakang:
=TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))
Hasilnya akan kelihatan seperti ini:
Ablebits Regex Remove Tool
Jika anda mempunyai peluang untuk menggunakan Suite Ultimate kami untuk Excel, anda mungkin telah menemui Alat Regex baharu yang diperkenalkan dengan keluaran terbaru. Keindahan fungsi Regex berasaskan .NET ini ialah mereka, pertama sekali, menyokong ekspresi biasa berciri penuhpilihan Alih Keluar dan tekan Alih Keluar .
Untuk mendapatkan hasil sebagai formula, bukan nilai, pilih kotak semak Sisipkan sebagai formula .
Untuk mengalih keluar teks dalam kurungan daripada rentetan dalam A2:A5, kami mengkonfigurasi tetapan seperti berikut:
Hasilnya, fungsi AblebitsRegexRemove disisipkan dalam lajur baharu di sebelah data asal anda.
Fungsi ini juga boleh dimasukkan terus dalam sel melalui kotak dialog Sisipkan Fungsi standard, di mana ia dikategorikan di bawah AblebitsUDFs .
Memandangkan AblebitsRegexRemove direka untuk mengalih keluar teks, ia memerlukan hanya dua argumen - rentetan sumber dan regex. Kedua-dua parameter boleh ditakrifkan secara langsung dalam formula atau dibekalkan dalam bentuk rujukan sel. Jika perlu, fungsi tersuai ini boleh digunakan bersama-sama dengan mana-mana fungsi asli.
Sebagai contoh, untuk memangkas ruang tambahan dalam rentetan yang terhasil, anda boleh menggunakan fungsi TRIM sebagai pembungkus:
=TRIM(AblebitsRegexRemove(A5, $A$2))
Begitulah cara untuk mengalih keluar rentetan dalam Excel menggunakan ungkapan biasa. Saya mengucapkan terima kasih kerana membaca dan tidak sabar untuk melihat anda di blog kami minggu depan!
Muat turun yang tersedia
Alih keluar rentetan menggunakan regex - contoh (fail.xlsm)
Suite Ultimate - versi percubaan (fail .exe)
dalam.Untuk maklumat lanjut, sila lihat fungsi RegExpReplace.
Petua. Dalam kes mudah, anda boleh mengalih keluar aksara atau perkataan tertentu daripada sel dengan formula Excel. Tetapi ungkapan biasa menyediakan lebih banyak pilihan untuk ini.
Cara mengalih keluar rentetan menggunakan ungkapan biasa - contoh
Seperti yang dinyatakan di atas, untuk mengalih keluar bahagian teks yang sepadan dengan corak, anda perlu menggantikannya dengan rentetan kosong. Jadi, formula generik mengambil bentuk ini:
RegExpReplace(text, pattern, "", [instance_num], [match_case])Contoh di bawah menunjukkan pelbagai pelaksanaan konsep asas ini.
Alih keluar semua padanan atau padanan tertentu
Fungsi RegExpReplace direka untuk mencari semua subrentetan yang sepadan dengan regex tertentu. Kejadian yang hendak dialih keluar dikawal oleh argumen pilihan ke-4, bernama instance_num .
Lalainya ialah "semua padanan" - apabila instance_num operator penggabungan (&) dan fungsi Teks seperti KANAN, TENGAH dan KIRI.
Sebagai contoh, untuk menulis semua nombor telefon dalam format (123) 456-7890, formulanya ialah:
="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)
Di mana B5 ialah output fungsi RegExpReplace.
Alih keluar aksara khas menggunakan regex
Dalam salah satu tutorial kami, kami melihat cara untuk mengalih keluar aksara yang tidak diingini dalam Excel menggunakan fungsi terbina dan tersuai. Ekspresi biasa menjadikan perkara lebih mudah! Daripada menyenaraikan semua aksara untuk dipadamkan, hanya tentukan aksara yang anda mahu simpan :)
Corak adalah berdasarkan kelas aksara yang dinafikan - karet diletakkan di dalam kelas aksara [^ ] untuk memadankan mana-mana aksara tunggal TIDAK dalam kurungan. Pengkuantiti + memaksanya untuk menganggap aksara berturut-turut sebagai padanan tunggal, supaya penggantian dilakukan untuk subrentetan yang sepadan dan bukannya untuk setiap aksara individu.
Bergantung pada keperluan anda, pilih salah satu regeks berikut.
Untuk mengalih keluar aksara bukan abjad , iaitu semua aksara kecuali huruf dan digit:
Corak : [^0-9a-zA-Z] +
Untuk membersihkan semua aksara kecuali huruf , angka dan ruang :
Corak : [^0-9a-zA-Z ]+
Untuk memadam semua aksara kecuali huruf , digit dan garis bawah , anda boleh menggunakan \ W yang bermaksud mana-mana aksara yang BUKAN aksara abjad angka ataugaris bawah:
Corak : \W+
Jika anda mahu menyimpan beberapa aksara lain , mis. tanda baca, letakkannya di dalam kurungan.
Sebagai contoh, untuk menanggalkan sebarang aksara selain daripada huruf, angka, noktah, koma atau ruang, gunakan regex berikut:
Corak : [^0-9a-zA-Z\., ]+
Ini berjaya menghapuskan semua aksara khas, tetapi ruang putih tambahan kekal.
Untuk membetulkannya, anda boleh menyarangkan fungsi di atas ke satu lagi yang menggantikan berbilang ruang dengan satu aksara ruang.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
Atau hanya gunakan fungsi TRIM asli dengan kesan yang sama :
=TRIM(RegExpReplace(A5, $A$2, ""))
Regex untuk mengalih keluar aksara bukan angka
Untuk memadam semua aksara bukan angka daripada rentetan, anda boleh menggunakan sama ada formula panjang ini atau salah satu regeks yang sangat mudah yang disenaraikan di bawah.
Padankan mana-mana aksara yang BUKAN digit:
Corak : \D+
Lepaskan aksara bukan angka menggunakan kelas yang ditolak:
Corak : [^0-9]+
Corak : [^\d] +
Petua. Jika matlamat anda adalah untuk mengalih keluar teks dan menumpahkan nombor yang tinggal ke dalam sel yang berasingan atau meletakkan semuanya dalam satu sel yang dipisahkan dengan pembatas yang ditentukan, kemudian gunakan fungsi RegExpExtract seperti yang dijelaskan dalam Cara mengekstrak nombor daripada rentetan menggunakan ungkapan biasa.
Regex untuk mengalih keluar semua selepas ruang
Untuk memadamkan semua selepas ruang, gunakan sama ada ruang ( ) atauruang putih (\s) aksara untuk mencari ruang pertama dan .* untuk memadankan mana-mana aksara selepasnya.
Jika anda mempunyai rentetan satu baris yang hanya mengandungi ruang biasa (nilai 32 dalam sistem ASCII 7-bit) , tidak kira mana satu regex di bawah yang anda gunakan. Dalam kes rentetan berbilang baris, ia membuat perbezaan.
Untuk mengalih keluar semua selepas aksara ruang , gunakan regex ini:
Corak : " .*"
=RegExpReplace(A5, " .*", "")
Formula ini akan menanggalkan apa-apa sahaja selepas ruang pertama dalam setiap baris . Untuk hasil dipaparkan dengan betul, pastikan anda menghidupkan Teks Balut.
Untuk menanggalkan semua selepas ruang putih (termasuk ruang, tab, pemulangan pengangkutan dan baris baharu), regex ialah:
Corak : \s.*
=RegExpReplace(A5, "\s.*", "")
Oleh kerana \s sepadan dengan beberapa jenis ruang putih yang berbeza termasuk baris baharu (\n), formula ini memadamkan segala-galanya selepas ruang pertama dalam sel, tidak kira berapa banyak baris yang terdapat di dalamnya.
Regex untuk mengalih keluar teks selepas tertentu aksara
Menggunakan kaedah daripada contoh sebelumnya, anda boleh memadamkan teks selepas mana-mana aksara yang anda tentukan.
Untuk mengendalikan setiap baris secara berasingan:
Corak generik : char.*
Dalam rentetan satu baris, ini akan mengalih keluar segala-galanya selepas char . Dalam rentetan berbilang baris, setiap baris akan diproses secara individu kerana dalam perisa Regex VBA, noktah (.) sepadan dengan mana-mana aksara kecuali aksara baharupermulaan rentetan ^, kami memadankan sifar atau lebih aksara bukan ruang [^ ]* yang serta-merta diikuti oleh satu atau lebih ruang " +". Bahagian terakhir ditambah untuk menghalang ruang utama yang berpotensi dalam hasil.
Untuk mengalih keluar teks sebelum ruang pertama dalam setiap baris, formula ditulis dalam mod "semua padanan" lalai ( instance_num ditinggalkan):
=RegExpReplace(A5, "^[^ ]* +", "")
Untuk memadamkan teks sebelum ruang pertama dalam baris pertama dan membiarkan semua baris lain utuh, argumen instance_num ditetapkan kepada 1:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regex untuk menanggalkan semua sebelum aksara
Cara paling mudah untuk mengalih keluar semua teks sebelum aksara tertentu ialah dengan menggunakan regex seperti ini:
Corak generik : ^[^char]*char
Diterjemahkan ke dalam bahasa manusia, ia berkata: "dari permulaan rentetan yang dilabuhkan oleh ^ , padankan 0 atau lebih aksara kecuali char [^char]* sehingga kejadian pertama char .
Contohnya, untuk memadam semua teks sebelum titik bertindih pertama , gunakan ungkapan biasa ini:
Corak : ^[^:]*:
Untuk mengelakkan ruang utama dalam hasil carian, tambahkan aksara ruang putih \s* pada tamat. Ini akan mengalih keluar segala-galanya g sebelum kolon pertama dan potong mana-mana ruang betul-betul selepasnya:
Corak : ^[^:]*:\s*
=RegExpReplace(A5, "^[^:]*:\s*", "")
Petua. Selain ungkapan biasa, Excel mempunyai cara tersendiri untuk mengalih keluar teks mengikut kedudukan atau padanan. Untuk mengetahui cara menyelesaikan tugas dengan formula asli,sila lihat Cara mengalih keluar teks sebelum atau selepas aksara dalam Excel.
Regex untuk mengalih keluar semua kecuali
Untuk menghapuskan semua aksara daripada rentetan kecuali yang anda mahu simpan, gunakan kelas aksara yang ditolak.
Sebagai contoh, untuk mengalih keluar semua aksara kecuali huruf kecil dan titik, regex ialah:
Corak : [^a-z\.]+
Malah, kita boleh melakukannya tanpa pengkuantiti + di sini kerana fungsi kita menggantikan semua menemui mancis. Pengkuantiti hanya menjadikannya lebih pantas sedikit - daripada mengendalikan setiap aksara individu, anda menggantikan subrentetan.
=RegExpReplace(A5, "[^a-z\.]+", "")
Regex untuk mengalih keluar teg html dalam Excel
Mula-mula, perlu diingatkan bahawa HTML bukan bahasa biasa, jadi menghuraikannya menggunakan ungkapan biasa bukanlah cara terbaik. Walau bagaimanapun, regeks pasti boleh membantu menanggalkan teg daripada sel anda untuk menjadikan set data anda lebih bersih.
Memandangkan teg html sentiasa diletakkan dalam kurungan sudut , anda boleh menemuinya menggunakan salah satu regeks berikut.
Kelas ditolak:
Corak : ]*>
Di sini, kami memadankan kurungan sudut pembukaan, diikuti dengan sifar atau lebih kejadian bagi mana-mana aksara kecuali kurungan sudut tutup [^>]* sehingga kurungan sudut tutup terdekat.
Carian malas:
Corak :
Di sini, kami memadankan apa-apa sahaja daripada kurungan pembukaan pertama hingga kurungan penutup pertama. Tanda soal memaksa .* untuk memadankan sesedikit aksarabaris.
Untuk memproses semua baris sebagai rentetan tunggal:
Corak generik : char(.