Mục lục
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:
- 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.
- .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 :
- Trên tab Dữ liệu Ablebits , trong nhóm Văn bản , hãy nhấp vào Công cụ Regex .
- 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:
- 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 .
- 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.
- 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 và 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 và 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 và 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 và 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 và 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 và 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 và 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 và value_if_false cộng 5 cho 15 , khớp với 15
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 |