Ví dụ về RegEx trong Excel: sử dụng biểu thức chính quy trong công thức

  • Chia Sẻ Cái Này
Michael Brown

Không hiểu tại sao biểu thức chính quy không được hỗ trợ trong công thức Excel? Bây giờ, chúng là :) Với các hàm tùy chỉnh của chúng tôi, bạn có thể dễ dàng tìm, thay thế, trích xuất và xóa các chuỗi khớp với một mẫu cụ thể.

Ngay từ cái nhìn đầu tiên, Excel có mọi thứ bạn cần cho chuỗi văn bản các thao tác. Hmm… còn biểu thức chính quy thì sao? Rất tiếc, không có hàm Regex tích hợp nào trong Excel. Nhưng không ai nói rằng chúng ta không thể tạo biểu thức của riêng mình :)

    Biểu thức chính quy là gì?

    Biểu thức chính quy (còn gọi là regex hoặc regexp ) là một chuỗi ký tự được mã hóa đặc biệt để xác định mẫu tìm kiếm. Sử dụng mẫu đó, bạn có thể tìm tổ hợp ký tự phù hợp trong một chuỗi hoặc xác thực dữ liệu đầu vào. Nếu bạn đã quen với ký hiệu ký tự đại diện, thì bạn có thể coi biểu thức chính quy là phiên bản nâng cao của ký tự đại diện.

    Biểu thức chính quy có cú pháp riêng bao gồm các ký tự đặc biệt, toán tử và cấu trúc. Ví dụ: [0-5] khớp với bất kỳ chữ số đơn nào từ 0 đến 5.

    Các biểu thức chính quy được sử dụng trong nhiều ngôn ngữ lập trình bao gồm cả JavaScript và VBA. Cái sau có một đối tượng RegExp đặc biệt mà chúng ta sẽ sử dụng để tạo các hàm tùy chỉnh của mình.

    Excel có hỗ trợ biểu thức chính quy không?

    Rất tiếc, không có hàm Regex sẵn có nào trong Excel. Để có thể sử dụng các biểu thức chính quy trong công thức của mình, bạn sẽ phải tạo hàm do người dùng xác định của riêng mình (VBAđối số:

    =IF(RegExpMatch(A5, $A$2), "Yes", "No")

    Để biết thêm ví dụ về công thức, vui lòng xem:

    • Cách khớp chuỗi bằng biểu thức chính quy
    • Xác thực dữ liệu Excel với biểu thức chính quy

    Hàm trích xuất biểu thức chính quy Excel

    Hàm RegExpExtract tìm kiếm các chuỗi con khớp với một biểu thức chính quy và trích xuất tất cả các kết quả khớp hoặc đối sánh cụ thể.

    RegExpExtract(text, pattern, [instance_num], [match_case])

    Ở đâu:

    • Văn bản (bắt buộc) - chuỗi văn bản cần tìm kiếm in.
    • Pattern (bắt buộc) - biểu thức chính quy để khớp.
    • Instance_num (tùy chọn) - một số sê-ri cho biết phiên bản nào sẽ được khớp trích xuất. Nếu bị bỏ qua, trả về tất cả kết quả phù hợp đã tìm thấy (mặc định).
    • Match_case (tùy chọn) - xác định xem có khớp (TRUE hoặc bỏ qua) hoặc bỏ qua trường hợp văn bản (FALSE) hay không.

    Bạn có thể lấy mã của hàm tại đây.

    Ví dụ: cách trích xuất chuỗi bằng biểu thức chính quy

    Ví dụ xa hơn một chút, hãy trích xuất số hóa đơn. Đối với điều này, chúng tôi sẽ sử dụng biểu thức chính quy rất đơn giản khớp với bất kỳ số có 7 chữ số nào:

    Pattern : \b\d{7}\b

    Put mẫu trong A2 và bạn sẽ hoàn thành công việc với công thức nhỏ gọn và tinh tế này:

    =RegExpExtract(A5, $A$2)

    Nếu mẫu khớp, công thức sẽ trích xuất số hóa đơn, nếu không tìm thấy mẫu khớp - không có gì được trả lại.

    Để biết thêm ví dụ, vui lòng xem: Cách trích xuất chuỗi trong Excelsử dụng regex.

    Hàm Thay thế Regex của Excel

    Hàm RegExpReplace thay thế các giá trị khớp với biểu thức chính quy bằng văn bản bạn chỉ định.

    RegExpReplace(văn bản, mẫu, thay thế , [instance_num], [match_case])

    Ở đâu:

    • Văn bản (bắt buộc) - chuỗi văn bản để tìm kiếm.
    • Mẫu (bắt buộc) - biểu thức chính quy để khớp.
    • Thay thế (bắt buộc) - văn bản để thay thế các chuỗi con khớp với.
    • Instance_num (tùy chọn) - ví dụ để thay thế. Giá trị mặc định là "tất cả các kết quả phù hợp".
    • Match_case (tùy chọn) - kiểm soát xem có khớp (TRUE hoặc bỏ qua) hoặc bỏ qua trường hợp văn bản (FALSE).

    Mã của hàm có sẵn tại đây.

    Ví dụ: cách thay thế hoặc xóa chuỗi bằng biểu thức chính quy

    Một số bản ghi của chúng tôi chứa số thẻ tín dụng. Thông tin này là bí mật và bạn có thể muốn thay thế nó bằng một cái gì đó hoặc xóa hoàn toàn. Có thể hoàn thành cả hai tác vụ với sự trợ giúp của hàm RegExpReplace . Làm sao? Trong trường hợp thứ hai, chúng tôi sẽ thay thế bằng một chuỗi trống.

    Trong bảng mẫu của chúng tôi, tất cả các số thẻ có 16 chữ số, được viết thành 4 nhóm được phân tách bằng dấu cách. Để tìm chúng, chúng tôi sao chép mẫu bằng biểu thức chính quy sau:

    Pattern : \b\d{4} \d{4} \d{4} \d{4}\ b

    Để thay thế, chuỗi sau được sử dụng:

    Replacement : XXXX XXXX XXXXXXXX

    Và đây là công thức hoàn chỉnh để thay thế số thẻ tín dụng bằng thông tin nhạy cảm:

    =RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "XXXX XXXX XXXX XXXX")

    Với biểu thức chính quy và văn bản thay thế trong các ô riêng biệt ( A2 và B2), công thức hoạt động tốt như nhau:

    Trong Excel, "xóa" là một trường hợp cụ thể của "thay thế". Để xóa số thẻ tín dụng, chỉ cần sử dụng một chuỗi trống ("") cho đối số replacement :

    =RegExpReplace(A5, "\b\d{4} \d{4} \d{4} \d{4}\b", "")

    Mẹo. Để có nhiều dòng trống trong kết quả, bạn có thể sử dụng một hàm RegExpReplace khác như trong ví dụ sau: Cách xóa dòng trống bằng regex.

    Để biết thêm thông tin, vui lòng xem:

    • Cách thay thế chuỗi trong Excel bằng regex
    • Cách xóa chuỗi bằng regex
    • Cách loại bỏ khoảng trắng bằng regex

    Công cụ regex để khớp, trích xuất , thay thế và xóa chuỗi con

    Người dùng Ultimate Suite của chúng tôi có thể nhận được tất cả sức mạnh của biểu thức chính quy mà không cần chèn một dòng mã nào vào sổ làm việc của họ. Tất cả mã cần thiết đều do các nhà phát triển của chúng tôi viết và được tích hợp mượt mà trong Excel của bạn trong khi cài đặt.

    Không giống như các hàm VBA đã thảo luận ở trên, các hàm của Ultimate Suite dựa trên .NET, mang lại hai ưu điểm chính:

    1. Bạn có thể sử dụng biểu thức chính quy trong sổ làm việc .xlsx thông thường mà không cần thêm bất kỳ mã VBA nào và phải lưu chúng dưới dạng tệp hỗ trợ macro.
    2. .Công cụ .NET Regex hỗ trợ cổ điển đầy đủ tính năngbiểu thức chính quy, cho phép bạn xây dựng các mẫu phức tạp hơn.

    Cách sử dụng Regex trong Excel

    Với Ultimate Suite đã cài đặt, việc sử dụng biểu thức chính quy trong Excel chỉ đơn giản như hai bước sau :

    1. Trên tab Dữ liệu Ablebits , trong nhóm Văn bản , hãy nhấp vào Công cụ Regex .

    2. Trên ngăn Công cụ regex , hãy làm như sau:
      • Chọn dữ liệu nguồn.
      • Nhập mẫu regex của bạn.
      • Chọn tùy chọn mong muốn: Khớp , Trích xuất , Xóa hoặc Thay thế .
      • Để có được kết quả như công thức chứ không phải giá trị, hãy chọn hộp kiểm Chèn dưới dạng công thức .
      • Nhấn nút hành động.

      Ví dụ: để xóa số thẻ tín dụng khỏi các ô Câu trả lời 2:A6, chúng tôi định cấu hình các cài đặt này:

    Trong một thời gian ngắn, một hàm AblebitsRegex sẽ được chèn vào một cột mới ở bên phải cột ban đầu của bạn dữ liệu. Trong trường hợp của chúng tôi, công thức là:

    =AblebitsRegexRemove(A2, "\b\d{4} \d{4} \d{4} \d{4}\b")

    Sau khi có công thức, bạn có thể chỉnh sửa, sao chép hoặc di chuyển công thức đó giống như bất kỳ công thức gốc nào.

    Cách chèn công thức Regex trực tiếp vào ô

    Các hàm AblebitsRegex cũng có thể được chèn trực tiếp vào ô mà không cần sử dụng giao diện của phần bổ trợ. Đây là cách thực hiện:

    1. Nhấp vào nút fx trên thanh công thức hoặc Chèn Hàm trên tab Công thức .
    2. Trong hộp thoại Chèn Hàm , chọn AblebitsUDFs danh mục, chọn hàm quan tâm và nhấp vào OK.

    3. Xác định các đối số của hàm như bạn thường làm và nhấp vào OK. Xong!

    Để biết thêm thông tin, vui lòng xem Công cụ Regex dành cho Excel.

    Đó là cách sử dụng các biểu thức chính quy để khớp, trích xuất, thay thế và xóa văn bản trong các ô Excel. Tôi cảm ơn bạn đã đọc và mong được gặp bạn trên blog của chúng tôi vào tuần tới!

    Các bản tải xuống có sẵn

    Excel Regex - ví dụ về công thức (tệp .xlsm)

    Bộ Ultimate - bản dùng thử (tệp .exe)

    hoặc dựa trên .NET) hoặc cài đặt các công cụ của bên thứ ba hỗ trợ biểu thức chính quy.

    Bảng gian lận Regex Excel

    Cho dù mẫu biểu thức chính quy rất đơn giản hay cực kỳ phức tạp, nó đều được xây dựng bằng cách sử dụng cú pháp chung. Hướng dẫn này không nhằm mục đích dạy cho bạn các biểu thức chính quy. Đối với điều này, có rất nhiều tài nguyên trực tuyến, từ hướng dẫn miễn phí dành cho người mới bắt đầu đến các khóa học cao cấp dành cho người dùng nâng cao.

    Dưới đây chúng tôi cung cấp tài liệu tham khảo nhanh về các mẫu RegEx chính sẽ giúp bạn nắm được những điều cơ bản. Nó cũng có thể hoạt động như bảng mẹo của bạn khi nghiên cứu thêm các ví dụ.

    Nếu bạn cảm thấy thoải mái với các biểu thức chính quy, bạn có thể chuyển thẳng đến các hàm RegExp.

    Các ký tự

    Các ký tự này là các mẫu được sử dụng thường xuyên nhất để khớp với các ký tự nhất định.

    Mẫu Mô tả Ví dụ Các mẫu phù hợp
    . Ký tự đại diện: khớp với bất kỳ ký tự đơn nào ngoại trừ dấu ngắt dòng .ot dấu chấm , hot , pot , @ot
    \d Ký tự chữ số: một chữ số bất kỳ từ 0 đến 9 \d Trong a1b , khớp với 1
    \D Bất kỳ ký tự nào KHÔNG phải là chữ số \D Trong a1b , khớp với a b
    \s Ký tự khoảng trắng: dấu cách, tab, dòng mới và xuống dòng .\s. Trong 3 xu , phù hợp với 3 c
    \S Bất kỳký tự không phải khoảng trắng \S+ Trong 30 xu , khớp với 30 xu
    \w Ký tự từ: bất kỳ chữ cái, chữ số hoặc dấu gạch dưới ASCII nào \w+ Trong 5_cats*** , khớp với 5_cats
    \W Bất kỳ ký tự nào KHÔNG phải là ký tự chữ và số hoặc dấu gạch dưới \W+ Trong 5_cats*** , khớp với ***
    \t Tab
    \n Dòng mới \n\d+ Trong dòng hai chuỗi bên dưới, khớp với 10

    5 con mèo

    10 con chó

    \ Thoát khỏi ý nghĩa đặc biệt của một ký tự, vì vậy bạn có thể tìm kiếm nó \.

    \w+\.

    Thoát khỏi dấu chấm để bạn có thể tìm thấy chữ "." ký tự trong chuỗi

    Mr. , Mrs. , Prof.

    Lớp ký tự

    Sử dụng các mẫu này, bạn có thể khớp các thành phần của các bộ ký tự khác nhau.

    Mẫu Mô tả Ví dụ Trùng khớp
    [ký tự] Khớp bất kỳ ký tự đơn nào trong ngoặc d[oi]g dog and dig
    [^characters] Khớp với bất kỳ ký tự đơn nào KHÔNG có trong ngoặc d[^oi]g Khớp dag, dug , d1g

    Không khớp dog dig

    [từ–đến] Khớp với bất kỳ ký tự nào trong phạm vi giữangoặc vuông [0-9]

    [a-z]

    [A-Z]

    Bất kỳ chữ số đơn nào từ 0 đến 9

    Bất kỳ chữ cái viết thường nào

    Bất kỳ chữ cái viết hoa nào

    Số lượng

    Số lượng là các biểu thức đặc biệt chỉ định số lượng ký tự khớp. Một bộ định lượng luôn áp dụng cho ký tự trước nó.

    Mẫu Mô tả Ví dụ Trận đấu
    * Không có hoặc nhiều lần xuất hiện 1a* 1, 1a , 1aa, 1aaa , v.v.
    + Một hoặc nhiều lần xuất hiện po+ In pot , khớp với po

    Trong kém , khớp với poo

    ? Không hoặc một lần xuất hiện roa?d đường, thanh
    *? Không hoặc nhiều lần xuất hiện hơn, nhưng càng ít càng tốt 1a*? Trong 1a , 1aa 1aaa , khớp 1a
    +? Một hoặc nhiều lần xuất hiện, nhưng càng ít càng tốt po+? Trong pot poor , khớp với po
    ?? Không hoặc một lần xuất hiện , nhưng càng ít càng tốt roa?? Trong đường thanh , khớp với ro
    {n} Khớp mẫu trước đó n lần \d{3} Chính xác 3 chữ số
    {n ,} Khớp với mẫu trước n lần trở lên \d{3,} 3 chữ số trở lên
    {n,m} Khớp vớimẫu trước giữa n và m lần \d{3,5} Từ 3 đến 5 chữ số

    Nhóm

    Các cấu trúc nhóm được sử dụng để lấy một chuỗi con từ chuỗi nguồn, vì vậy bạn có thể thực hiện một số thao tác với nó.

    Cú pháp Mô tả Ví dụ Kết quả phù hợp
    (mẫu) Nhóm chụp: chụp một chuỗi con phù hợp và gán cho nó một số thứ tự (\d+) Trong 5 con mèo và 10 con chó , bắt 5 (nhóm 1) và 10 (nhóm 2)
    (?:pattern) Nhóm không chụp: khớp với một nhóm nhưng không chụp nhóm đó (\d+)(?: chó) Trong 5 con mèo và 10 con chó , chụp 10
    \1 Nội dung của nhóm 1 (\d+)\+(\d+)=\2\+\1 Khớp 5+10=10+5 và chụp 5 10 , nằm trong nhóm chụp
    \2 Nội dung của nhóm 2

    Neo

    Neo chỉ định một vị trí trong chuỗi đầu vào nơi cần tìm một trận đấu.

    Mô tả Mô tả Ví dụ Các trận đấu
    ^ Bắt đầu chuỗi

    Lưu ý: [^trong ngoặc] có nghĩa là "không phải"

    ^\d+ Bất kỳ số lượng chữ số nào ở cuối bắt đầu chuỗi.

    Trong 5 mèo và 10 chó , khớp với 5

    $ Cuối chuỗi \d+$ Bất kỳ số chữ số nào ở cuối chuỗi.

    Trong 10Y

    (?<=) Cái nhìn tích cực về phía sau (?<=Y)X Khớp với biểu thức X khi nó đứng trước Y (nghĩa là nếu có Y đứng sau X)
    (? Cái nhìn tiêu cực (? Khớp với biểu thức X khi nó KHÔNG đứng trước Y

    Bây giờ bạn đã biết những điều cơ bản, hãy chuyển sang phần thú vị nhất - sử dụng regex trên dữ liệu thực để phân tích chuỗi và tìm thông tin cần thiết. Nếu bạn cần thêm chi tiết về cú pháp, hướng dẫn của Microsoft về Ngôn ngữ biểu thức chính quy có thể hữu ích.

    Hàm RegEx tùy chỉnh cho Excel

    Như đã đề cập, Microsoft Excel không có hàm RegEx tích hợp sẵn. Để bật biểu thức chính quy, chúng tôi đã tạo ba hàm VBA tùy chỉnh (còn gọi là hàm do người dùng xác định). Bạn có thể sao chép mã từ các trang được liên kết bên dưới hoặc từ mẫu của chúng tôi sổ làm việc, sau đó dán vào các tệp Excel của riêng bạn.

    Cách hoạt động của các hàm VBA RegExp

    Phần này giải thích cơ chế bên trong và có thể là int đặc biệt dành cho những ai muốn biết chính xác điều gì xảy ra ở phần phụ trợ.

    Để bắt đầu sử dụng biểu thức chính quy trong VBA, bạn cần kích hoạt thư viện tham chiếu đối tượng RegEx hoặc sử dụng hàm CreateObject. Để giúp bạn tránh khỏi rắc rối khi thiết lập tham chiếu trong trình soạn thảo VBA, chúng tôi đã chọn phương pháp thứ hai.

    Đối tượng RegExp có 4 thuộc tính:

    • Pattern - là mẫu để khớp trong chuỗi đầu vào.
    • Chuỗi - kiểm soát việc tìm tất cả các kết quả khớp trong chuỗi đầu vào hay chỉ tìm chuỗi đầu tiên. Trong các chức năng của chúng tôi, nó được đặt thành True để nhận được tất cả các kết quả phù hợp .
    • MultiLine - xác định xem có khớp mẫu trên các ngắt dòng trong chuỗi nhiều dòng hay chỉ trong dòng đầu tiên. Trong các mã của chúng tôi, nó được đặt thành True để tìm kiếm ở mọi dòng .
    • IgnoreCase - xác định xem biểu thức chính quy phân biệt chữ hoa chữ thường (mặc định) hay chữ hoa chữ thường không nhạy cảm (được đặt thành True). Trong trường hợp của chúng tôi, điều đó phụ thuộc vào cách bạn định cấu hình tham số match_case tùy chọn. Theo mặc định, tất cả các chức năng đều phân biệt chữ hoa chữ thường .

    Giới hạn VBA RegExp

    Excel VBA triển khai các mẫu biểu thức chính quy cơ bản nhưng thiếu nhiều tính năng nâng cao có sẵn trong .NET, Perl, Java và các công cụ biểu thức chính quy khác. Ví dụ: VBA RegExp không hỗ trợ các công cụ sửa đổi nội tuyến, chẳng hạn như (?i) đối với kết hợp không phân biệt chữ hoa chữ thường hoặc (?m) đối với chế độ nhiều dòng, giao diện, lớp POSIX, v.v.

    Excel Regex Hàm khớp

    Hàm RegExpMatch tìm kiếm một chuỗi đầu vào cho văn bản khớp với một biểu thức chính quy và trả về TRUE nếu tìm thấy khớp, ngược lại là FALSE.

    RegExpMatch(text, pattern, [ match_case])

    Ở đâu:

    • Văn bản (bắt buộc) - một hoặc nhiều chuỗi để tìm kiếm.
    • Mẫu ( bắt buộc) - thông thườngbiểu thức để khớp.
    • Match_case (tùy chọn) - loại khớp. TRUE hoặc bỏ qua - phân biệt chữ hoa chữ thường; FALSE - không phân biệt chữ hoa chữ thường

    Mã của hàm ở đây.

    Ví dụ: cách sử dụng biểu thức chính quy để khớp chuỗi

    Trong tập dữ liệu bên dưới, giả sử bạn muốn để xác định các mục chứa mã SKU.

    Vì mỗi SKU bắt đầu bằng 2 chữ cái viết hoa, theo sau là dấu gạch nối, tiếp theo là 4 chữ số, bạn có thể khớp chúng bằng cách sử dụng biểu thức sau.

    Mẫu : \b[A-Z]{2}-\d{4}\b

    Trong đó [A-Z]{2} có nghĩa là 2 chữ cái viết hoa bất kỳ từ A đến Z và \d{4 } có nghĩa là 4 chữ số bất kỳ từ 0 đến 9. Ranh giới từ \b cho biết SKU là một từ riêng biệt và không phải là một phần của chuỗi lớn hơn.

    Khi mẫu đã được thiết lập, hãy bắt đầu nhập công thức như bạn thường làm , và tên của hàm sẽ xuất hiện trong danh sách được đề xuất bởi AutoComplete của Excel:

    Giả sử chuỗi gốc ở dạng A5, công thức sẽ như sau:

    =RegExpMatch(A5, "\b[A-Z]{2}-\d{3}\b")

    Để thuận tiện, bạn có thể nhập biểu thức chính quy vào một ô riêng biệt và sử dụng tham chiếu tuyệt đối ($A$2) cho đối số mẫu t. Điều này đảm bảo rằng địa chỉ ô sẽ không thay đổi khi bạn sao chép công thức sang các ô khác:

    =RegExpMatch(A5, $A$2)

    Để hiển thị nhãn văn bản của riêng bạn thay vì TRUE và FALSE, hãy lồng RegExpMatch vào hàm IF và chỉ định văn bản mong muốn trong value_if_true value_if_false cộng 5 cho 15 , khớp với 15

    \b Ranh giới từ \bjoy\b Khớp với joy dưới dạng một từ riêng biệt, nhưng không khớp với enjoyable . \B KHÔNG PHẢI ranh giới từ \Bjoy\B Trùng khớp với joy trong enjoyable , nhưng không phải là một từ riêng biệt.

    Cấu trúc luân phiên (OR)

    Toán hạng luân phiên kích hoạt logic OR, vì vậy bạn có thể so khớp phần tử này hoặc phần tử kia.

    Cấu trúc Mô tả Ví dụ Trận đấu

    Michael Brown là một người đam mê công nghệ chuyên dụng với niềm đam mê đơn giản hóa các quy trình phức tạp bằng các công cụ phần mềm. Với hơn một thập kỷ kinh nghiệm trong ngành công nghệ, anh ấy đã trau dồi kỹ năng của mình trong Microsoft Excel và Outlook, cũng như Google Trang tính và Tài liệu. Blog của Michael dành để chia sẻ kiến ​​thức và chuyên môn của anh ấy với những người khác, cung cấp các mẹo và hướng dẫn dễ thực hiện để cải thiện năng suất và hiệu quả. Cho dù bạn là một chuyên gia dày dạn kinh nghiệm hay người mới bắt đầu, blog của Michael đều cung cấp những hiểu biết có giá trị và lời khuyên thiết thực để tận dụng tối đa những công cụ phần mềm thiết yếu này.