Mục lục
Trong các chuỗi bên dưới, giả sử bạn muốn xóa số thứ tự đầu tiên. Tất cả các số như vậy bắt đầu bằng dấu thăng (#) và chứa chính xác 5 chữ số. Vì vậy, chúng ta có thể xác định chúng bằng biểu thức chính quy sau:
Pattern : #\d{5}\b
Từ ranh giới \b chỉ định rằng một chuỗi con phù hợp không thể một phần của chuỗi lớn hơn, chẳng hạn như #10000001.
Để xóa tất cả các kết quả phù hợp, đối số instance_num không được xác định:
=RegExpReplace(A5, "#\d{5}\b", "")
Để chỉ xóa lần xuất hiện đầu tiên, chúng tôi đặt đối số instance_num thành 1:
=RegExpReplace(A5, "#\d{5}\b", "", 1)
Regex để xóa một số ký tự
Để xóa một số ký tự khỏi chuỗi, chỉ cần viết ra tất cả các ký tự không mong muốn và phân tách chúng bằng một thanh dọccú pháp không có giới hạn VBA RegExp và thứ hai, không yêu cầu chèn bất kỳ mã VBA nào vào sổ làm việc của bạn vì tất cả việc tích hợp mã đều do chúng tôi thực hiện ở phần phụ trợ.
Phần công việc của bạn là xây dựng một biểu thức chính quy và phục vụ nó cho chức năng :) Để tôi chỉ cho bạn cách thực hiện điều đó trên một ví dụ thực tế.
Cách xóa văn bản trong ngoặc đơn và dấu ngoặc đơn bằng biểu thức chính quy
Trong chuỗi văn bản dài, thông tin ít quan trọng hơn thường được đặt trong [ngoặc] và (dấu ngoặc đơn). Làm cách nào để bạn xóa những chi tiết không liên quan đó mà vẫn giữ tất cả dữ liệu khác?
Thực tế, chúng tôi đã tạo một biểu thức chính quy tương tự để xóa thẻ html, tức là văn bản trong dấu ngoặc nhọn. Rõ ràng, các phương thức tương tự cũng sẽ hoạt động đối với dấu ngoặc vuông và dấu ngoặc tròn.
Pattern : (\(.*?\))
Bạn đã bao giờ nghĩ Excel sẽ mạnh mẽ như thế nào nếu ai đó có thể làm phong phú hộp công cụ của nó bằng các biểu thức thông thường chưa? Chúng tôi không chỉ suy nghĩ mà còn nghiên cứu nó :) Và bây giờ, bạn có thể thêm hàm RegEx tuyệt vời này vào sổ làm việc của riêng mình và xóa sạch các chuỗi con khớp với một mẫu ngay lập tức!
Tuần trước, chúng tôi đã xem xét về cách sử dụng biểu thức chính quy để thay thế chuỗi trong Excel. Đối với điều này, chúng tôi đã tạo một chức năng Thay thế Regex tùy chỉnh. Hóa ra, chức năng này vượt ra ngoài mục đích sử dụng chính của nó và không chỉ có thể thay thế các chuỗi mà còn loại bỏ chúng. Làm thế nào mà có thể được? Trong Excel, việc xóa một giá trị không có gì khác ngoài việc thay thế nó bằng một chuỗi rỗng, điều mà hàm Regex của chúng tôi rất giỏi!
Hàm VBA RegExp để xóa chuỗi con trong Excel
Như chúng ta đã biết, mặc định Excel không hỗ trợ biểu thức chính quy. Để kích hoạt chúng, bạn cần tạo chức năng do người dùng xác định của riêng mình. Tin tốt là một chức năng như vậy đã được viết, thử nghiệm và sẵn sàng để sử dụng. Tất cả những gì bạn phải làm là sao chép mã này, dán mã vào trình soạn thảo VBA, sau đó lưu tệp của bạn dưới dạng sổ làm việc hỗ trợ macro (.xlsm).
Hàm này có cú pháp sau:
RegExpReplace(văn bản, mẫu, thay thế, [instance_num], [match_case])Ba đối số đầu tiên là bắt buộc, hai đối số cuối cùng là tùy chọn.
Trong đó:
- Văn bản - chuỗi văn bản để tìm kiếmcó thể cho đến khi nó tìm thấy dấu ngoặc đóng.
Cho dù bạn chọn mẫu nào, kết quả sẽ hoàn toàn giống nhau.
Ví dụ: để xóa tất cả các thẻ html khỏi một chuỗi trong A5 và để lại văn bản, công thức là:
=RegExpReplace(A5, "]*>", "")
Hoặc bạn có thể sử dụng bộ định lượng chậm như trong ảnh chụp màn hình:
Giải pháp này hoạt động hoàn hảo cho văn bản đơn (hàng 5 - 9). Đối với nhiều văn bản (hàng 10 - 12), kết quả có vấn đề - văn bản từ các thẻ khác nhau được hợp nhất thành một. Điều này có đúng hay không? Tôi e rằng, đó không phải là điều có thể dễ dàng quyết định - tất cả phụ thuộc vào sự hiểu biết của bạn về kết quả mong muốn. Ví dụ: trong B11, kết quả được mong đợi là "A1"; trong khi ở B10, bạn có thể muốn phân tách "data1" và "data2" bằng dấu cách.
Để xóa thẻ html và phân tách các văn bản còn lại bằng dấu cách, bạn có thể tiến hành theo cách sau:
- Thay thẻ bằng dấu cách " ", không phải chuỗi trống:
=RegExpReplace(A5, "]*>", " ")
- Giảm nhiều khoảng trắng thành một ký tự khoảng trắng:
=RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " ")
- Cắt bớt khoảng trắng ở đầu và cuối:
=TRIM(RegExpReplace(RegExpReplace(A5, "]*>", " "), " +", " "))
Kết quả sẽ giống như sau:
Công cụ xóa Ablebits Regex
Nếu bạn đã có cơ hội sử dụng Ultimate Suite cho Excel của chúng tôi, có thể bạn đã khám phá ra Công cụ Regex mới được giới thiệu cùng với bản phát hành gần đây. Cái hay của các hàm Regex dựa trên .NET này là trước tiên, chúng hỗ trợ biểu thức chính quy đầy đủ tính năngtùy chọn Xóa và nhấn Xóa .
Để nhận kết quả dưới dạng công thức, không phải giá trị, hãy chọn hộp kiểm Chèn dưới dạng công thức .
Để xóa văn bản trong dấu ngoặc khỏi chuỗi trong A2:A5, chúng tôi định cấu hình cài đặt như sau:
Kết quả là hàm AblebitsRegexRemove được chèn vào một cột mới bên cạnh dữ liệu gốc của bạn.
Hàm cũng có thể được nhập trực tiếp vào một ô thông qua hộp thoại Chèn Hàm tiêu chuẩn, trong đó hàm được phân loại theo AblebitsUDFs .
Vì AblebitsRegexRemove được thiết kế để xóa văn bản nên nó chỉ yêu cầu hai đối số - chuỗi nguồn và biểu thức chính quy. Cả hai tham số có thể được xác định trực tiếp trong công thức hoặc được cung cấp dưới dạng tham chiếu ô. Nếu cần, hàm tùy chỉnh này có thể được sử dụng cùng với bất kỳ hàm gốc nào.
Ví dụ: để cắt bớt khoảng trắng thừa trong chuỗi kết quả, bạn có thể sử dụng hàm TRIM làm trình bao bọc:
=TRIM(AblebitsRegexRemove(A5, $A$2))
Đó là cách xóa chuỗi trong Excel bằng biểu thức chính quy. 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
Xóa chuỗi bằng regex - ví dụ (tệp .xlsm)
Bộ cuối cùng - phiên bản dùng thử (tệp .exe)
in.Để biết thêm thông tin, vui lòng xem chức năng RegExpReplace.
Mẹo. Trong những trường hợp đơn giản, bạn có thể loại bỏ các ký tự hoặc từ cụ thể khỏi các ô bằng công thức Excel. Nhưng biểu thức chính quy cung cấp nhiều tùy chọn hơn cho việc này.
Cách xóa chuỗi bằng biểu thức chính quy - ví dụ
Như đã đề cập ở trên, để xóa các phần văn bản khớp với mẫu, bạn phải thay thế chúng với một chuỗi rỗng. Vì vậy, một công thức chung có dạng như sau:
RegExpReplace(text, pattern, "", [instance_num], [match_case])Các ví dụ dưới đây cho thấy các triển khai khác nhau của khái niệm cơ bản này.
Xóa tất cả các kết quả khớp hoặc khớp cụ thể
Hàm RegExpReplace được thiết kế để tìm tất cả các chuỗi con khớp với một biểu thức chính quy nhất định. Những lần xuất hiện cần loại bỏ được kiểm soát bởi đối số tùy chọn thứ 4, có tên là instance_num .
Giá trị mặc định là "tất cả các kết quả phù hợp" - khi instance_num toán tử nối (&) và các hàm Văn bản như RIGHT, MID và LEFT.
Ví dụ: để viết tất cả các số điện thoại ở định dạng (123) 456-7890, công thức là:
="("&LEFT(B5, 3)&") "&MID(B5, 4, 3)&"-"&RIGHT(B5, 4)
Trong đó B5 là đầu ra của hàm RegExpReplace.
Xóa các ký tự đặc biệt bằng regex
Trong một trong các hướng dẫn của chúng tôi, chúng tôi đã xem xét cách xóa các ký tự không mong muốn trong Excel bằng các hàm tùy chỉnh và sẵn có. Biểu thức thông thường làm cho mọi thứ dễ dàng hơn rất nhiều! Thay vì liệt kê tất cả các ký tự cần xóa, chỉ cần chỉ định những ký tự bạn muốn giữ lại :)
Mẫu dựa trên các lớp ký tự phủ định - dấu mũ được đặt bên trong một lớp ký tự [^ ] để khớp với bất kỳ ký tự đơn nào KHÔNG có trong ngoặc. Bộ định lượng + buộc nó coi các ký tự liên tiếp là một kết quả khớp duy nhất, do đó, việc thay thế được thực hiện cho một chuỗi con phù hợp thay vì cho từng ký tự riêng lẻ.
Tùy thuộc vào nhu cầu của bạn, hãy chọn một trong các biểu thức chính quy sau.
Để xóa các ký tự không phải chữ và số , tức là tất cả các ký tự ngoại trừ chữ cái và chữ số:
Pattern : [^0-9a-zA-Z] +
Để xóa tất cả ký tự ngoại trừ chữ cái , chữ số và dấu cách :
Hoa văn : [^0-9a-zA-Z ]+
Để xóa tất cả ký tự ngoại trừ chữ cái , chữ số và dấu gạch dưới , bạn có thể sử dụng \ W là viết tắt của bất kỳ ký tự nào KHÔNG phải là ký tự chữ và số hoặcgạch dưới:
Pattern : \W+
Nếu bạn muốn giữ lại một số ký tự khác , ví dụ: dấu chấm câu, hãy đặt chúng bên trong dấu ngoặc.
Ví dụ: để loại bỏ bất kỳ ký tự nào không phải là chữ cái, chữ số, dấu chấm, dấu phẩy hoặc dấu cách, hãy sử dụng biểu thức chính quy sau:
Mẫu : [^0-9a-zA-Z\., ]+
Thao tác này đã loại bỏ thành công tất cả các ký tự đặc biệt nhưng vẫn còn khoảng trắng thừa.
Để khắc phục điều này, bạn có thể lồng hàm trên vào một hàm khác thay thế nhiều khoảng trắng bằng một ký tự khoảng trắng.
=RegExpReplace(RegExpReplace(A5,$A$2,""), " +", " ")
Hoặc chỉ cần sử dụng hàm TRIM gốc với tác dụng tương tự :
=TRIM(RegExpReplace(A5, $A$2, ""))
Regex để xóa các ký tự không phải là số
Để xóa tất cả các ký tự không phải là số khỏi một chuỗi, bạn có thể sử dụng công thức dài này hoặc một trong các biểu thức chính quy rất đơn giản được liệt kê bên dưới.
Khớp với bất kỳ ký tự nào KHÔNG phải là chữ số:
Mẫu : \D+
Tách các ký tự không phải là số bằng cách sử dụng các lớp phủ định:
Mẫu : [^0-9]+
Mẫu : [^\d] +
Mẹo. Nếu mục tiêu của bạn là xóa văn bản và đổ các số còn lại vào các ô riêng biệt hoặc đặt tất cả chúng vào một ô được phân tách bằng dấu phân tách xác định, thì hãy sử dụng hàm RegExpExtract như được giải thích trong Cách trích xuất số từ chuỗi bằng biểu thức chính quy.
Regex để xóa mọi thứ sau dấu cách
Để xóa mọi thứ sau dấu cách, hãy sử dụng dấu cách ( ) hoặcký tự khoảng trắng (\s) để tìm khoảng trắng đầu tiên và .* để khớp với bất kỳ ký tự nào sau khoảng trắng đó.
Nếu bạn có chuỗi một dòng chỉ chứa khoảng trắng thông thường (giá trị 32 trong hệ thống ASCII 7 bit) , việc bạn sử dụng biểu thức chính nào dưới đây không thực sự quan trọng. Trong trường hợp chuỗi nhiều dòng, nó sẽ tạo ra sự khác biệt.
Để xóa mọi thứ sau ký tự khoảng trắng , hãy sử dụng biểu thức chính quy này:
Pattern : " .*"
=RegExpReplace(A5, " .*", "")
Công thức này sẽ loại bỏ bất kỳ thứ gì sau khoảng trắng đầu tiên trong mỗi dòng . Để kết quả hiển thị chính xác, hãy nhớ bật Ngắt dòng văn bản.
Để loại bỏ mọi thứ sau khoảng trắng (bao gồm khoảng trắng, tab, dấu xuống dòng và dòng mới), biểu thức chính quy là:
Mẫu : \s.*
=RegExpReplace(A5, "\s.*", "")
Bởi vì \s khớp với một vài loại khoảng trắng khác nhau bao gồm một dòng mới (\n), công thức này sẽ xóa mọi thứ sau khoảng trắng đầu tiên trong một ô, bất kể có bao nhiêu dòng trong đó.
Regex để xóa văn bản sau ô cụ thể ký tự
Sử dụng các phương thức từ ví dụ trước, bạn có thể xóa văn bản sau bất kỳ ký tự nào bạn chỉ định.
Để xử lý từng dòng riêng biệt:
Mẫu chung : char.*
Trong chuỗi một dòng, thao tác này sẽ xóa mọi thứ sau char . Trong chuỗi nhiều dòng, mỗi dòng sẽ được xử lý riêng lẻ vì trong VBA Regex, dấu chấm (.) khớp với bất kỳ ký tự nào ngoại trừ ký tự mớibắt đầu chuỗi ^, chúng tôi khớp với 0 hoặc nhiều ký tự không phải dấu cách [^ ]* ngay sau đó là một hoặc nhiều dấu cách " +". Phần cuối cùng được thêm vào để ngăn các khoảng trống ở đầu tiềm ẩn trong kết quả.
Để xóa văn bản trước khoảng trắng đầu tiên trong mỗi dòng, công thức được viết ở chế độ "tất cả khớp" mặc định ( instance_num bỏ qua):
=RegExpReplace(A5, "^[^ ]* +", "")
Để xóa văn bản trước khoảng trắng đầu tiên trong dòng đầu tiên và giữ nguyên tất cả các dòng khác, đối số instance_num được đặt thành 1:
=RegExpReplace(A5, "^[^ ]* +", "", 1)
Regex để loại bỏ mọi thứ trước ký tự
Cách dễ nhất để xóa tất cả văn bản trước một ký tự cụ thể là sử dụng biểu thức chính quy như thế này:
Mẫu chung : ^[^char]*char
Được dịch sang ngôn ngữ của con người, nó ghi: "từ đầu chuỗi được neo bởi ^ , khớp với 0 hoặc nhiều ký tự ngoại trừ char [^char]* cho đến lần xuất hiện đầu tiên của char .
Ví dụ: để xóa tất cả văn bản trước dấu hai chấm đầu tiên , hãy sử dụng biểu thức chính quy này:
Mẫu : ^[^:]*:
Để tránh các khoảng trắng ở đầu kết quả, hãy thêm một ký tự khoảng trắng \s* vào kết thúc. Thao tác này sẽ xóa mọi thứ g trước dấu hai chấm đầu tiên và cắt bỏ mọi khoảng trắng ngay sau dấu hai chấm:
Pattern : ^[^:]*:\s*
=RegExpReplace(A5, "^[^:]*:\s*", "")
Mẹo. Bên cạnh các biểu thức thông thường, Excel có các phương tiện riêng để xóa văn bản theo vị trí hoặc khớp. Để tìm hiểu cách hoàn thành nhiệm vụ với các công thức gốc,vui lòng xem Cách xóa văn bản trước hoặc sau một ký tự trong Excel.
Regex để xóa mọi thứ ngoại trừ
Để xóa tất cả các ký tự khỏi một chuỗi trừ những ký tự bạn muốn giữ lại, hãy sử dụng các lớp ký tự phủ định.
Ví dụ: để xóa tất cả các ký tự trừ các chữ cái viết thường và dấu chấm, biểu thức chính quy là:
Pattern : [^a-z\.]+
Thực tế, chúng ta có thể làm mà không cần bộ định lượng + ở đây vì hàm của chúng ta thay thế tất cả tìm thấy trận đấu. Bộ định lượng chỉ làm cho nó nhanh hơn một chút - thay vì xử lý từng ký tự riêng lẻ, bạn thay thế một chuỗi con.
=RegExpReplace(A5, "[^a-z\.]+", "")
Regex để xóa thẻ html trong Excel
Trước hết, cần lưu ý rằng HTML không phải là ngôn ngữ thông thường, do đó, việc phân tích cú pháp bằng biểu thức thông thường không phải là cách tốt nhất. Điều đó nói rằng, biểu thức chính quy chắc chắn có thể giúp tách các thẻ ra khỏi các ô của bạn để làm cho tập dữ liệu của bạn sạch hơn.
Vì các thẻ html luôn được đặt trong dấu ngoặc nhọn nên bạn có thể tìm thấy chúng bằng cách sử dụng một trong các biểu thức chính quy sau.
Lớp phủ định:
Mẫu : ]*>
Ở đây, chúng tôi khớp một dấu ngoặc nhọn mở, theo sau là 0 hoặc nhiều lần xuất hiện của bất kỳ ký tự nào ngoại trừ ký tự dấu ngoặc góc đóng [^>]* lên đến dấu ngoặc góc đóng gần nhất.
Tìm kiếm lười biếng:
Mẫu :
Ở đây, chúng tôi khớp bất cứ thứ gì từ khung mở đầu tiên đến khung đóng đầu tiên. Dấu chấm hỏi buộc .* khớp với càng ít ký tự càng tốtline.
Để xử lý tất cả các dòng dưới dạng một chuỗi:
Mẫu chung : char(.