Cara Menggunakan RegEx dalam Microsoft Word - Petua Excel

Lissa bertanya:

Adakah cara untuk menukar nombor (selalu nombor rawak) selepas perkataan musang? Contoh: fox 23, bear 1, fox 398, frog 12, fox 15. Saya mahu menukar nombor menjadi warna yang sama dengan perkataan fox.

Kita boleh mencari dan mengganti mengikut format dalam Microsoft Word. Ini adalah ciri hebat untuk mencari teks berformat dengan cepat, dan bahkan mengganti keseluruhan format teks dalam dokumen.

Pilih Carian Lanjutan pada pita.

Cari dan Ganti Dialog

Masukkan teks untuk mencari, kemudian klik butang Lainnya untuk melihat pilihan lanjutan, dan klik pada butang Format.

Pilihan Cari Lanjutan

Pilih pilihan Font dalam tetapan, maka anda dapat mengatur warna teks yang ingin anda temukan dalam dokumen. Klik OK untuk menutup tetingkap dialog Find Font.

Pilih warna teks dalam dialog Cari Font.

Klik Cari Seterusnya, dan anda akan melihat kejadian pertama teks yang dicari dengan warna tertentu akan dipilih.

Cari Seterusnya untuk mencari kejadian pertama.

Kami juga boleh membuat carian yang lebih rumit dengan menggunakan wildcard. Walau bagaimanapun, modul carian asli Word tidak membenarkan kami membuat carian bagaimana Lissa bertanya.

Di situlah kita boleh memanggil RegEx ke dalam permainan!

Perpustakaan Ekspresi Biasa VBSCript

VBA tidak dihantar dengan sokongan ekspresi biasa. Namun, perpustakaan Microsoft VBScript mengandungi kemampuan ungkapan biasa yang kuat. Perpustakaan ini adalah sebahagian daripada Internet Explorer 5.5 dan yang lebih baru, jadi tersedia di semua komputer yang menjalankan Windows XP, Vista, 7, 8, 8.1, atau 10.

Pengguna Mac

Oleh kerana Internet Explorer bukan aplikasi Mac, perpustakaan ini tidak ada di Mac. Oleh itu, sampel VBA di bawah tidak berfungsi di Mac.

Untuk menggunakan perpustakaan ini di VBA, beralih ke VBE, pilih Projek dan Rujukan di menu VBE, kemudian tatal ke bawah untuk mencari item "Microsoft VBScript Regular Expressions 5.5", dan tandakan untuk disertakan dalam aplikasi.

Perpustakaan Ekspresi Biasa VBScript

Masukkan modul baru, dan salin dan tampal kod berikut ke dalam modul ini.

Sub doRegexFind() Dim strSample As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "fox d+" .Global = True .IgnoreCase = True Set matches = .Execute(strSample) For Each fnd In matches Debug.Print fnd Next fnd End With End Sub

Prosedur ini mengambil contoh teks, mencari kod produk dengan corak yang diberikan - yang dimulai dengan "rubah", ruang tunggal dan nombor, dan mencetak kod yang sesuai di tetingkap Segera (tekan Ctrl + G di VBE jika tidak sudah nampak).

Kod produk yang sesuai dicetak di tetingkap Segera.

d+ kelas watak dalam corak mentakrifkan satu atau lebih watak berangka, dan corak pada dasarnya adalah awalan "rubah" diikuti dengan ruang yang diikuti oleh angka.

Maklumat Lanjut

Lawati Bahasa Ekspresi Biasa - Rujukan Pantas untuk maklumat lebih lanjut mengenai pelarian watak, kelas watak, dan sauh.

Salin dan tampal kod berikut untuk melihat RegEx beraksi untuk membuang ruang dari kod produk.

Sub doRegexFindReplace() Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim strSample As String strSample = "First product code is fox 12, second one is fox 22, and third product is fox 45." Set objRegex = New RegExp With objRegex .Pattern = "(fox) (d+)" .Global = True .IgnoreCase = True strSample = .Replace(strSample, "$1$2") End With Debug.Print strSample End Sub

Prosedur ini menggantikan isi teks sampel dengan membuang ruang dari kod produk yang dipadankan dengan corak yang diberikan, dan mencetak teks hasil di tetingkap Segera.

Teks yang diganti dicetak di tetingkap Segera.

Harap maklum bahawa coraknya sedikit berbeza daripada kod pertama. Istilah dalam corak ini dilampirkan dengan tanda kurung, dan istilah yang sesuai digunakan dalam kaedah Ganti sebagai $ 1 dan $ 2 mengikut urutan. Prosedur ini hanya menggabungkan dua istilah tanpa spasi.

Kembali ke Soalan

Mari kembali ke contoh teks yang kami gunakan pada awal artikel ini.

Teks Contoh

Kita perlu mencari "rubah" diikuti oleh watak angka, dan mengubah padanan dengan menggunakan warna bahagian "rubah" dalam teks yang sesuai.

Walaupun RegEx sangat sesuai dengan corak yang diberikan, ia tidak dapat menggantikan warna teks dalam dokumen Word. Oleh itu, kami akan menggabungkan kaedah RegEx dan Word VBA dalam prosedur berikut.

Berikut adalah langkah-langkahnya:

  1. Cari padanan dengan RegEx.
  2. Cari setiap teks yang sesuai dengan menggunakan kaedah Cari Kata.
  3. Cari warna perkataan pertama dalam julat yang dijumpai.
  4. Tukar warna julat yang dijumpai dengan warna pada langkah sebelumnya.

Tukar ke VBE, dan masukkan modul baru. Pastikan perpustakaan Ekspresi Biasa VBScript ditambahkan ke projek, dan salin dan tampal kod berikut ke dalam modul baru ini.

Sub doRegexMagic() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Set objRegex = New RegExp str = "fox" With Selection .HomeKey wdStory .WholeStory End With With objRegex .Pattern = str & " d+" .Global = True .IgnoreCase = True Set matches = .Execute(Selection.Text) End With With Selection .HomeKey wdStory With .Find .ClearFormatting .Forward = True .Format = False .MatchCase = True For Each fnd In matches .Text = fnd .Execute With Selection .Font.Fill.ForeColor = .Range.Words(1).Font.TextColor .MoveRight wdCharacter End With Next fnd End With .HomeKey wdStory End With End Sub 

Jalankan kodnya, dan inilah hasilnya.

Keputusan

Muat turun Fail Word

Untuk memuat turun fail Word: how-to-use-regex-in-microsoft-word.docm

RegEx dalam Excel?

Regex hilang sepenuhnya dari Excel. Walau bagaimanapun, kita masih boleh menggunakan Ekspresi Biasa VBScript di Excel VBA.

Launch Excel, open a new workbook, and create the content as shown below.

Sample data in Excel

Reference

This article has been inspired by Learn Excel 2010 - "Find & Replace Color of A Certain Word": Podcast #1714 published by Bill Jelen on May 21, 2013! So we wanted to use similar sample text as he used in the video. We just added numbers after the "fox".

Switch to VBE, and insert a new module. Make sure VBScript Regular Expressions library is added to the project just like you did in Word, and copy and paste the following code into this new module.

Sub doRegexMagicInExcel() Dim str As String Dim objRegex As RegExp Dim matches As MatchCollection Dim fnd As Match Dim rng As Range Dim cll As Range Set objRegex = New RegExp Set rng = Selection str = "fox" With objRegex .Pattern = "(" & str & ") (d+)" .Global = True .IgnoreCase = True For Each cll In rng.Cells Set matches = .Execute(cll.Value) For Each fnd In matches cll.Value = .Replace(cll.Value, "$1$2") Next fnd Next cll End With End Sub

Return to worksheet, and select the range with sample text. Run the macro, and see the result.

Result in Excel

This procedure loops through the cells in the selected range, replaces the text in the cells by removing the spaces from the product codes matched with the given RegEx pattern.

Download Excel File

To download the Excel file: how-to-use-regex-in-microsoft-excel.xlsm

Artikel menarik...