VBA Regex

Mục lục

Hướng dẫn này sẽ trình bày cách sử dụng Regex trong VBA.

Regex là gì?

Regex là viết tắt của cụm từ thông dụng. Biểu thức chính quy là một mẫu được tạo thành từ một chuỗi các ký tự mà bạn có thể sử dụng để tìm một mẫu phù hợp trong một chuỗi khác. Để sử dụng Regex trong VBA, bạn phải sử dụng đối tượng RegExp.

Một mẫu chẳng hạn như [A-C] có thể được sử dụng để tìm kiếm và đối sánh chữ cái viết hoa từ A đến C trong một chuỗi. Các mẫu Regex có cú pháp riêng và có thể được xây dựng bằng cách sử dụng một ký tự hoặc chuỗi ký tự.

Nhân vật phù hợp

Bảng sau đây cho thấy cú pháp sẽ cho phép bạn xây dựng các mẫu Regex.

Cú pháp mẫu Sự miêu tả Thí dụ Kết quả phù hợp được tìm thấy
. Khớp với bất kỳ ký tự đơn nào ngoại trừ vbNewLine f.n người hâm mộ, fon, f @ n, fwn
[nhân vật] Đối sánh bất kỳ ký tự đơn nào giữa các dấu ngoặc [] [fn] Chỉ khớp với “f” hoặc “n” trong quạt
[ký tự] Đối sánh bất kỳ ký tự đơn nào không nằm giữa dấu ngoặc [] [fn] Vì vậy, sẽ khớp "j" trong "fjn"
[bắt đầu] Đối sánh bất kỳ ký tự nào là một phần của phạm vi trong dấu ngoặc [] [1-5] Sẽ khớp với "4" và "5" trong "45"
\ w Đối sánh các ký tự chữ và số và dấu gạch dưới, nhưng không đối sánh với ký tự khoảng trắng \ w Sẽ khớp với "c" trong ", c."
\ W Đối sánh bất kỳ ký tự không phải chữ và số và dấu gạch dưới \ W Có khớp “@” trong “bb @ bb” không
\NS Đối sánh bất kỳ ký tự khoảng trắng nào chẳng hạn như dấu cách và tab \NS Sẽ khớp ”” trong “Đây là”
\NS Khớp với bất kỳ ký tự khoảng trắng nào không phải là khoảng trắng \NS Đối sánh “T” và “h” trong “T h”
\NS Khớp với bất kỳ chữ số thập phân đơn nào \NS Sẽ khớp với "7" trong "a7h"
\NS Khớp với bất kỳ chữ số không phải thập phân nào \NS Có khớp với j trong “47j” không
\ Thoát khỏi các ký tự đặc biệt, sau đó cho phép bạn tìm kiếm chúng \. Sẽ khớp với “.” trong “59.pQ”
\NS Chuyển hướng \NS Có khớp với một ký tự tab
\NS Vận chuyển trở lại \NS Có khớp với một ký tự xuống dòng (vbCr)
\n vbNewLine (vbTab) \n Sẽ phù hợp với một dòng mới

Bộ định lượng

Bạn có thể sử dụng bộ định lượng để chỉ định số lần bạn muốn mẫu khớp với chuỗi.

Bộ định lượng Sự miêu tả Thí dụ Đã tìm thấy kết quả phù hợp
* Đối sánh với không hoặc nhiều lần xuất hiện fn * a fna, fa, fnna, fnnna, fnfnnna
+ Đối sánh một hoặc nhiều lần xuất hiện fn + a fna, fnna, fnfnna
? Đối sánh không hoặc một fn? a fa, fna
{n} Đối sánh với “n” nhiều lần d \ W {4} Sẽ khớp với “d….” trong “d…. & 5hi”
{n,} Đối sánh ít nhất “n” số lần d \ W {4,} Sẽ khớp với “d…. &” Trong “d…. & 5hi”
{n, m} So khớp giữa n và m số lần d \ W {1,8} Sẽ khớp với “d…. &&&&” trong “d…. &&&& 5hi”

Phân nhóm

Nhóm hoặc chụp cho phép bạn sử dụng một mẫu để chụp và trích xuất một phần của chuỗi. Vì vậy, không chỉ mô hình được khớp, mà phần của chuỗi khớp với mô hình được chụp.

Mẫu Sự miêu tả Thí dụ Các trận đấu được tìm thấy và chụp
(biểu hiện) Nhóm và nắm bắt mẫu trong ngoặc đơn (\ W {4}) Sẽ nhóm và chụp “@@@@” từ “1 @@@@ 1jlmba”

Cách sử dụng Regex trong VBA

Để sử dụng Regex trong VBA, trước tiên bạn phải đặt tham chiếu trong trình soạn thảo VBE. Trong trình soạn thảo VBE, đi tới Công cụ> Tham chiếu> Cụm từ thông dụng Microsoft VBScript.

Đây là các thuộc tính của đối tượng RegExp:

  • Mẫu - Mẫu bạn sẽ sử dụng để khớp với chuỗi.
  • Bỏ qua trường hợp - Nếu Đúng, thì kết hợp bỏ qua chữ cái.
  • Toàn cầu - Nếu Đúng, thì tất cả các kết quả phù hợp của mẫu trong chuỗi được tìm thấy. Nếu Sai thì chỉ tìm thấy kết quả phù hợp đầu tiên.
  • MultiLine - Nếu Đúng, khớp mẫu xảy ra trên các ngắt dòng.

Đây là các phương thức của đối tượng RegExp:

  • Thử nghiệm - Tìm kiếm một mẫu trong một chuỗi và trả về True nếu tìm thấy một kết quả phù hợp.
  • Thay thế - Thay thế các lần xuất hiện của mẫu bằng chuỗi thay thế.
  • Hành hình - Trả về kết quả phù hợp của mẫu so với chuỗi.

Kiểm tra một mẫu để khớp với một chuỗi

Bạn có thể sử dụng phương pháp Kiểm tra để kiểm tra xem một mẫu có khớp với một chuỗi trong chuỗi đầu vào hay không. Kết quả là True nếu tìm thấy kết quả phù hợp. Đoạn mã sau sẽ chỉ cho bạn cách kiểm tra một mẫu so với một chuỗi:

12345678910111213 Sub RegexTestingAPattern ()Dim stringOne As StringLàm mờ regexOne As ObjectĐặt regexOne = New RegExpregexOne.Pattern = "f… .a"stringOne = "000111fjo88a8"Debug.Print regexOne.Test (stringOne)Kết thúc Sub

Kết quả là:

Thay thế một mẫu trong một chuỗi

Bạn có thể sử dụng phương thức Replace để thay thế phiên bản đầu tiên của một mẫu phù hợp trong một chuỗi hoặc tất cả các phiên bản của một mẫu khớp trong một chuỗi. Nếu Global được đặt thành False, thì chỉ phiên bản đầu tiên được thay thế. Đoạn mã sau sẽ chỉ cho bạn cách thay thế một mẫu trong một chuỗi:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringLàm mờ regexOne As ObjectĐặt regexOne = New RegExpregexOne.Pattern = "Đây là số"regexOne.Global = SaistringOne = "Đây là số 718901"Debug.Print regexOne.Replace (stringOne, "Đó là số mới")Kết thúc Sub

Kết quả là:

Để chỉ thay thế phần số của chuỗi được sử dụng ở trên, bạn sẽ sử dụng mã sau:

1234567891011 Sub RegexReplacingAPattern ()Dim stringOne As StringLàm mờ regexOne As ObjectĐặt regexOne = New RegExpregexOne.Pattern = "[\ D] +"regexOne.Global = SaistringOne = "Đây là số 718901"Debug.Print regexOne.Replace (stringOne, "777192")Kết thúc Sub

Kết quả là:

Để thay thế mọi trường hợp của một mẫu nhất định trong một chuỗi, bạn sẽ đặt giá trị toàn cục thành True. Đoạn mã sau chỉ cho bạn cách thay thế mọi phiên bản của -A1289C- trong chuỗi:

1234567891011 Sub RegexReplacingEveryInstanceOfAPattern ()Dim stringOne As StringLàm mờ regexOne As ObjectĐặt regexOne = New RegExpregexOne.Pattern = "\ W \ A \ d + C \ W"regexOne.Global = ĐúngstringOne = "ABC-A1289C-ABC-A1289C-ABC"Debug.Print regexOne.Replace (stringOne, "IJK")Kết thúc Sub

Khớp và hiển thị một mẫu trong một chuỗi

Bạn có thể sử dụng phương thức Execute để so khớp một hoặc tất cả các trường hợp của một mẫu trong một chuỗi. Đoạn mã sau cho bạn biết cách đối sánh và hiển thị tất cả các phiên bản của mẫu từ chuỗi:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringLàm mờ regexOne As ObjectĐặt regexOne = New RegExpregexOne.Pattern = "A.C"regexOne.Global = ĐúngregexOne.IgnoreCase = Bỏ quaCasestringOne = "ABC-A1289C-ADC-A1289C-AJC"Đặt theMatches = regexOne.Execute (stringOne)Đối với mỗi trận đấu trong các trận đấuDebug.Print Match.ValueKế tiếpKết thúc Sub

Kết quả là:

Giả sử chúng tôi chỉ muốn đối sánh -ADC- từ chuỗi trên. Đoạn mã sau cho biết cách đối sánh và chỉ hiển thị -ADC- từ chuỗi:

123456789101112131415161718 Sub RegexMatchingAndDisplayingAPattern ()Dim stringOne As StringLàm mờ regexOne As ObjectĐặt regexOne = New RegExpregexOne.Pattern = "\ - \ A.C \ -"regexOne.Global = SairegexOne.IgnoreCase = Bỏ quaCasestringOne = "ABC-A1289C-ADC-A1289C-AEC"Đặt theMatches = regexOne.Execute (stringOne)Đối với mỗi trận đấu trong các trận đấuDebug.Print Match.ValueKế tiếpKết thúc Sub

Regex có thể mất một chút thời gian để tìm hiểu, nhưng nó là một công cụ cực kỳ mạnh mẽ để xác định / thao tác các chuỗi văn bản. Nó cũng được sử dụng rộng rãi trên các ngôn ngữ lập trình.

Bạn sẽ giúp sự phát triển của trang web, chia sẻ trang web với bạn bè

wave wave wave wave wave