Thử nghiệm VBScript RegExp

Liên hệ QC

Quang_Hải

Thành viên gạo cội
Tham gia
21/2/09
Bài viết
6,043
Được thích
7,936
Nghề nghiệp
Làm đủ thứ
Chúng ta cùng khảo sát những ứng dụng cơ bản của VBScript RegExp
Thông thường khi muốn tách số ra khỏi 1 chuỗi lẫn lộn vừa số vừa chữ thì chúng ta hay dùng vòng lặp để xử lý, nhưng với VBR thì công việc này khá đơn giản với dạng code thế này

Ví dụ này ta chỉ chú ý đến .Pattern="\D"
Phương thức này sẽ tìm tất cả các ký tự không phải là số

Tiếp theo ta dùng phương thức .Replace để thay các ký tự được tìm thấy bằng chuỗi rỗng (xoá các ký tự đó) để còn lại kết quả là những con số

PHP:
Sub RegExp1()
Dim VBR As Object, kq
Set VBR = CreateObject("VBScript.RegExp")
With VBR
   For i = 1 To 5
      .Global = True
      .Pattern = "\D"
      Cells(i, 2) = .Replace(Cells(i, 1), "")
   Next
End With
End Sub

Cũng với code tương tự chúng ta có thể cộng các con số đựơc tìm thấy lại với nhau
Ở đây ta để ý đến phần .Pattern="\B"
Nếu chúng ta sử dụng .Pattern="" thì có nghĩa ta đang nói đến bắt đầu và kết thúc của 1 ký tự, khi ta muốn thêm dấu + giữa các con số tìm được thì ta có kết quả thế này: +1+2+3+4+5+

Nhưng với .Pattern = "\B" thì sẽ loại được dấu cộng không mong muốn ở đầu và cuối của dãy số tìm được. Sau đó chúng ta dùng hàm Evaluate để biến chuỗi này thành bài toán cộng

PHP:
Sub RegExp2()
Dim VBR As Object, kq
Set VBR = CreateObject("VBScript.RegExp")
With VBR
   For i = 1 To 5
      .Global = True
      .Pattern = "\D"
      kq = .Replace(Cells(i, 1), "")
      .Pattern = "\B"
      Cells(i, 2) = Evaluate(.Replace(kq, "+"))
   Next
End With
End Sub

Để tách lấy các ký tự trong 1 chuỗi lẫn lộn số và chữ ta sử dụng .Pattern="\d"
"\d" sẽ tìm tất cả con số trong chuỗi để xử lý
PHP:
Sub RegExp3()
Dim VBR As Object, kq
Set VBR = CreateObject("VBScript.RegExp")
With VBR
   For i = 1 To 5
      .Global = True
      .Pattern = "\d"
      Cells(i, 2) = .Replace(Cells(i, 1), "")
   Next
End With
End Sub
Nhưng không may trong chuỗi ký tự có những ký tự không phải là những mẫu tự, ta có thể dùng thế này "\W" kết hợp với "\d" để khử hết các ký tự đó. Nhưng không hiểu sao ký tự _ vẫn không được xử lý triệt để nên tôi phải kết hợp thêm dấu _ trong Pattern
Lưu ý là chúng ta không bàn đến tiếng việt có dấu nha

PHP:
Sub RegExp4()
Dim VBR As Object, kq
Set VBR = CreateObject("VBScript.RegExp")
With VBR
   For i = 1 To 5
      .Global = True
      .Pattern = "[\W\d,_]"
      Cells(i, 2) = .Replace(Cells(i, 1), "")
   Next
End With
End Sub
 
Lần chỉnh sửa cuối:
PHP:
Sub RegExp4()
Dim VBR As Object, kq
Set VBR = CreateObject("VBScript.RegExp")
With VBR
   For i = 1 To 5
      .Global = True
      .Pattern = "[\W\d,_]"
      Cells(i, 2) = .Replace(Cells(i, 1), "")
   Next
End With
End Sub

Anh @quanghai1969 ơi,
em thử cái chuỗi này:
Reagang(.Resagasce("z%4^ 3# ¥™?+?¥2@>,.,/?>9.8.$% , a sez 3"";+++:'][{45]|{ !~`", ""), ".")
thì nó báo lỗi ấy...
anh xem giúp em với... em mò hoài mà hổng biết tại sao luôn
Cám ơn đại ca nhiều lắm nha...

##########

Ah, em tìm ra rồi:
.Pattern = "[\W\d,_]"
thành .Pattern = "[\W\D_]" (d thành D và ko có ",")
Cám ơn anh nha
 
Lần chỉnh sửa cuối:
Upvote 0
Em có câu hỏi sau mong các tiền bối chỉ giáo:
Em mong muốn tạo 1 Pattern mà có thể so sánh các chuỗi:
- Hoặc str1 = "cary 25g", hoặc str2 = "cà ry bột 5", hoặc str3 = "ca-ry bột 5g" <> Str0 = "Ca-ry bột 40g", có nghĩa là Str_Tmp.Count =0.
- Hoặc str1 = "cary 25g", hoặc str2 = "cà ry bột 5", hoặc str3 = "ca-ry bột 5g" <> Str0 = "Ca-ry bột 25g", có nghĩa là Str_Tmp.Count <>0.
Cảm ơn tiền bối đã quan tâm, nếu có khả thi thì em mong được góp ý ạ
Mã:
With CreateObject("VBScript.RegExp")
                .IgnoreCase = True
                .Global = True
                .Pattern = "[*c][aà][\s-](ry)[5.\s(túi)]*"
                Set Str_Tmp = .Execute("Ca-ry bột 40g")
                If Str_Tmp.Count <> 0 Then
                    result = Str_Tmp.Item(0).SubMatches.Item(0)
                End If
            End With
 
Upvote 0
Web KT
Back
Top Bottom