Biểu thức chính quy được sử dụng cho Kết hợp mẫu.
Để sử dụng trong Excel, hãy làm theo các bước sau:
Bước 1 : Thêm tham chiếu VBA vào "Biểu thức chính quy Microsoft VBScript 5.5"
- Chọn tab "Nhà phát triển" ( Tôi không có tab này, tôi phải làm gì? )
- Chọn biểu tượng "Visual Basic" từ phần ruy băng 'Code'
- Trong cửa sổ "Microsoft Visual Basic for Application", chọn "Công cụ" từ menu trên cùng.
- Chọn "Tài liệu tham khảo"
- Chọn hộp bên cạnh "Microsoft VBScript Biểu thức chính quy 5.5" để đưa vào sổ làm việc của bạn.
- Nhấp vào "OK"
Bước 2 : Xác định mẫu của bạn
Định nghĩa cơ bản:
-
Phạm vi.
- Ví dụ:
a-z
khớp với một chữ cái viết thường từ a đến z
- Ví dụ:
0-5
khớp với bất kỳ số nào từ 0 đến 5
[]
Khớp chính xác một trong các đối tượng bên trong các dấu ngoặc này.
- Ví dụ:
[a]
khớp với chữ a
- Ví dụ:
[abc]
khớp với một chữ cái có thể là a, b hoặc c
- Ví dụ,
[a-z]
phù hợp với bất kỳ chữ cái viết thường của bảng chữ cái.
()
Nhóm phù hợp khác nhau cho mục đích trở lại. Xem ví dụ dưới đây.
{}
Số nhân cho các bản sao lặp lại của mẫu được xác định trước nó.
- Ví dụ:
[a]{2}
khớp hai chữ cái viết thường liên tiếp a:aa
- Ví dụ
[a]{1,3}
phù hợp với ít nhất một và tối đa ba thấp hơn thư trường hợp a
, aa
,aaa
+
Khớp ít nhất một hoặc nhiều mẫu của mẫu được xác định trước mẫu đó.
- Ví dụ như
a+
sẽ phù hợp liên tiếp của một a
, aa
, aaa
, và vân vân
?
Khớp 0 hoặc một trong các mẫu được xác định trước nó.
- Ví dụ: Mẫu có thể có hoặc không có nhưng chỉ có thể được khớp một lần.
- Ví dụ,
[a-z]?
khớp với chuỗi rỗng hoặc bất kỳ chữ cái viết thường nào.
*
Khớp 0 hoặc nhiều mẫu được xác định trước nó. - Ví dụ: Wildcard cho mẫu có thể có hoặc không có. - Ví dụ: [a-z]*
khớp với chuỗi rỗng hoặc chuỗi ký tự viết thường.
.
Phù hợp với bất kỳ nhân vật nào ngoại trừ dòng mới \n
- Ví dụ: Ghép
a.
chuỗi hai ký tự bắt đầu bằng a và kết thúc bằng bất cứ thứ gì ngoại trừ\n
|
Toán tử OR
- Ví dụ,
a|b
có nghĩa là a
hoặc b
có thể được khớp.
- Ví dụ,
red|white|orange
kết hợp chính xác một trong các màu.
^
Nhà điều hành KHÔNG
- Ví dụ:
[^0-9]
ký tự không thể chứa số
- Ví dụ:
[^aA]
ký tự không thể là chữ thường a
hoặc chữ hoaA
\
Thoát khỏi ký tự đặc biệt theo sau (ghi đè hành vi trên)
- Ví dụ như
\.
, \\
, \(
, \?
, \$
,\^
Các mẫu neo:
^
Trận đấu phải xảy ra khi bắt đầu chuỗi
- Ví dụ:
^a
ký tự đầu tiên phải là chữ thườnga
- Ví dụ:
^[0-9]
Ký tự đầu tiên phải là một số.
$
Trận đấu phải diễn ra ở cuối chuỗi
- Ví dụ:
a$
Ký tự cuối cùng phải là chữ thườnga
Bảng ưu tiên:
Order Name Representation
1 Parentheses ( )
2 Multipliers ? + * {m,n} {m, n}?
3 Sequence & Anchors abc ^ $
4 Alternation |
Chữ viết tắt được xác định trước:
abr same as meaning
\d [0-9] Any single digit
\D [^0-9] Any single character that's not a digit
\w [a-zA-Z0-9_] Any word character
\W [^a-zA-Z0-9_] Any non-word character
\s [ \r\t\n\f] Any space character
\S [^ \r\t\n\f] Any non-space character
\n [\n] New line
Ví dụ 1 : Chạy dưới dạng macro
Macro ví dụ sau đây nhìn vào giá trị trong ô A1
để xem nếu 1 hoặc 2 ký tự đầu tiên là chữ số. Nếu vậy, chúng được loại bỏ và phần còn lại của chuỗi được hiển thị. Nếu không, sau đó một hộp xuất hiện cho bạn biết rằng không tìm thấy kết quả khớp. Cell A1
giá trị của 12abc
sẽ trở lại abc
, giá trị 1abc
sẽ trở lại abc
, giá trị abc123
sẽ trở lại "Không khớp" bởi vì các chữ số không phải là lúc bắt đầu của chuỗi.
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1")
If strPattern <> "" Then
strInput = Myrange.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
End Sub
Ví dụ 2 : Chạy dưới dạng hàm trong ô
Ví dụ này giống như ví dụ 1 nhưng được thiết lập để chạy như một hàm trong ô. Để sử dụng, thay đổi mã thành này:
Function simpleCellRegex(Myrange As Range) As String
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim strReplace As String
Dim strOutput As String
strPattern = "^[0-9]{1,3}"
If strPattern <> "" Then
strInput = Myrange.Value
strReplace = ""
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
simpleCellRegex = regEx.Replace(strInput, strReplace)
Else
simpleCellRegex = "Not matched"
End If
End If
End Function
Đặt chuỗi của bạn ("12abc") trong ô A1
. Nhập công thức này =simpleCellRegex(A1)
vào ô B1
và kết quả sẽ là "abc".
Ví dụ 3 : Lặp lại phạm vi
Ví dụ này giống như ví dụ 1 nhưng vòng lặp thông qua một phạm vi ô.
Private Sub simpleRegex()
Dim strPattern As String: strPattern = "^[0-9]{1,2}"
Dim strReplace As String: strReplace = ""
Dim regEx As New RegExp
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A5")
For Each cell In Myrange
If strPattern <> "" Then
strInput = cell.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
MsgBox (regEx.Replace(strInput, strReplace))
Else
MsgBox ("Not matched")
End If
End If
Next
End Sub
Ví dụ 4 : Tách các mẫu khác nhau
Ví dụ này lặp qua một phạm vi ( A1
, A2
& A3
) và tìm kiếm một chuỗi bắt đầu bằng ba chữ số theo sau là một ký tự alpha và sau đó là 4 chữ số. Đầu ra phân tách mô hình khớp với các ô liền kề bằng cách sử dụng ()
. $1
đại diện cho mẫu đầu tiên phù hợp trong tập đầu tiên của ()
.
Private Sub splitUpRegexPattern()
Dim regEx As New RegExp
Dim strPattern As String
Dim strInput As String
Dim Myrange As Range
Set Myrange = ActiveSheet.Range("A1:A3")
For Each C In Myrange
strPattern = "(^[0-9]{3})([a-zA-Z])([0-9]{4})"
If strPattern <> "" Then
strInput = C.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = False
.Pattern = strPattern
End With
If regEx.test(strInput) Then
C.Offset(0, 1) = regEx.Replace(strInput, "$1")
C.Offset(0, 2) = regEx.Replace(strInput, "$2")
C.Offset(0, 3) = regEx.Replace(strInput, "$3")
Else
C.Offset(0, 1) = "(Not matched)"
End If
End If
Next
End Sub
Các kết quả:
Ví dụ mẫu bổ sung
String Regex Pattern Explanation
a1aaa [a-zA-Z][0-9][a-zA-Z]{3} Single alpha, single digit, three alpha characters
a1aaa [a-zA-Z]?[0-9][a-zA-Z]{3} May or may not have preceding alpha character
a1aaa [a-zA-Z][0-9][a-zA-Z]{0,3} Single alpha, single digit, 0 to 3 alpha characters
a1aaa [a-zA-Z][0-9][a-zA-Z]* Single alpha, single digit, followed by any number of alpha characters
</i8> \<\/[a-zA-Z][0-9]\> Exact non-word character except any single alpha followed by any single digit