Hàm REGEX

8 min read
I. Giới thiệu
REGEXMATCH, REGEXEXTRACT, và REGEXREPLACE các hàm sử dụng biểu thức chính quy để tìm, trích xuất hoặc thay thế văn bản trong một tập dữ liệu.
II. Về các hàm
REGEXMATCH
  • Chức năng: Kiểm tra xem văn bản có khớp với biểu thức chính quy hay không và trả về một Boolean (TRUE hoặc FALSE).
  • Cú pháp: =REGEXMATCH(văn bản, biểu thức chính quy)
  • Đối số:
  • Văn bản (bắt buộc): Văn bản cần được kiểm tra
  • Cụm từ thông dụng (bắt buộc): Văn bản cần được khớp
  • Ví dụ: = REGEXMATCH("Sheets", "S.e") sẽ trả về TRUE
REGEXEXTRACT
  • Chức năng: Trích xuất văn bản khớp với biểu thức chính quy
  • Cú pháp: = REGEXEXTRACT(văn bản, biểu thức chính quy)
  • Đối số:
  • Văn bản (bắt buộc): Văn bản cần được kiểm tra
  • Cụm từ thông dụng (bắt buộc): Văn bản cần được trích xuất
  • Ví dụ: = REGEXEXTRACT("abcedfg", "c.*f") trích xuất tất cả văn bản từ c đến f (bao gồm c, f) trong chuỗi "abcedfg", sẽ trả về cedf.
REGEXREPLACE
  • Chức năng: Khớp với một chuỗi văn bản và thay thế nó bằng một chuỗi văn bản khác
  • Cú pháp: = REGEXREPLACE(văn bản, biểu thức chính quy, văn bản thay thế)
  • Đối số:
  • Văn bản (bắt buộc): Văn bản cần được kiểm tra
  • Cụm từ thông dụng (bắt buộc): Chuỗi văn bản cần được thay thế
  • Văn bản thay thế (bắt buộc): Văn bản sẽ thay thế chuỗi văn bản đã chỉ định
  • Ví dụ: = REGEXREPLACE("abcedfg", "a.*d", "xyz") sẽ trả về xyzfg
III. Cú pháp cụm từ thông dụng
Những chức năng này dựa vào biểu thức chính quy để thực thi, nên việc hiểu cách viết cụm từ thông dụng là rất quan trọng.
1. Ví dụ
Hãy tưởng tượng bạn cần trích xuất địa chỉ email từ một tập dữ liệu văn bản lớn. Mặc dù địa chỉ email tuân theo một định dạng chuẩn, nhưng độ dài và các loại ký tự được hỗ trợ ở các phần khác nhau thì lại thay đổi. Dưới đây là một cách mà biểu thức chính quy có thể được sử dụng để mô tả một địa chỉ email:
250px|700px|reset
Ban đầu trông hàm có vẻ đáng sợ, nhưng nó sẽ trở nên rõ ràng hơn nhiều sau khi bạn đã đi qua phần Siêu kí tự. Dưới đây là một bản phân tích cơ bản:
  • Phần 1: Mô tả tiền tố email: Một chuỗi chứa chữ cái hoặc số. Dấu + ở đây cho biết độ dài không cố định. Hậu tố email cũng tuân theo định dạng này, vì vậy biểu thức giống nhau được sử dụng sau ký hiệu (@).
  • Phần 2: Chỉ định rằng chức năng nên tìm kiếm một dấu chấm (.) trong hậu tố email (ví dụ.com). Vì dấu chấm phục vụ một chức năng đặc biệt trong cú pháp, một ký tự thoát, dấu gạch chéo (\), phải được thêm thành công vào phía trước. Lưu ý rằng ký hiệu (@) trong ví dụ trước không phải là một ký tự đặc biệt, vì vậy không cần ký tự thoát.
  • Phần 3: Mô tả nửa sau của hậu tố email: Một chuỗi bao gồm nhiều chữ cái viết thường (như các miền email ".com").
Giống như có nhiều cách để giải quyết các bài toán toán học, có nhiều cách để viết một biểu thức chính quy để mô tả cùng một loại nội dung. Cách trên chỉ là một ví dụ. Để hiểu hơn về việc viết biểu thức chính quy, chúng tôi sẽ đi sâu hơn vào cú pháp của nó:
2. Khớp chính xác
Chức năng sẽ trả về một kết quả khớp chính xác nếu không có ký tự đặc biệt nào được sử dụng. Ví dụ =REGEXMATCH("Sheets", "se") có nghĩa là chúng tôi đang tìm kiếm "se" trong "Sheets," điều này sẽ trả về FALSE vì không tìm thấy khớp chính xác của "se".
3. Ký tự đặc biệt
Ký tự đặc biệt là những ký tự có ý nghĩa đặc biệt trong cụm từ thông dụng. Trong ví dụ trên, nếu chúng tôi thay đổi biểu thức nhân viên chính thức thành "S.e" để công thức trở thành =REGEXMATCH("Sheets", "S.e"), thì TRUE sẽ được trả về thay vì vì một dấu chấm (.) là một ký tự đặc biệt đại diện cho bất kỳ ký tự nào không phải là dấu ngắt dòng. Và vì "Sheets" chứa "She", công thức với "S.e" sẽ trả về TRUE.
Quy tắc khớp: Theo mặc định từ trái sang phải. Nếu số lần lặp lại không được chỉ định, chỉ có bộ giá trị đầu tiên khớp với biểu thức nhân viên chính thức sẽ được trả về.
Danh mục
Ký tự
Mô tả
Ví dụ
Bộ ký tự
[]
Lớp ký tự. Khớp với bất kỳ ký tự nào trong [].
Công thức: =REGEXREPLACE("Room231","[0-9]","X")
Bất kỳ số nào trong "Room231" sẽ được thay đổi thành "X".
Kết quả: RoomXXX
[^]
Lớp ký tự phủ định. Khớp với bất kỳ ký tự nào không nằm trong [^].
Lưu ý: Nếu "^" không nằm trong dấu ngoặc vuông, nó sẽ khớp với bắt đầu của một chuỗi.
Công thức: =REGEXREPLACE("Room231","[^0-9]","X")
Bất kỳ ký tự không phải số nào trong "Room231" sẽ được thay thế bằng "X".
Kết quả: XXXX231
Lặp lại
*
Khớp với ký tự hoặc biểu thức con trước "*" xuất hiện 0 hoặc nhiều lần. Thường được sử dụng để diễn đạt bất cứ điều gì.
Công thức: =REGEXMATCH("Sheets","[0-9]*")
Kiểm tra xem "Sheets" có chứa 0 hoặc nhiều số, tức là bất kỳ số nào hoặc không có số nào.
Kết quả: TRUE
+
Khớp với ký tự hoặc biểu thức con trước "+" xuất hiện 1 hoặc nhiều lần.
Công thức: =REGEXMATCH("Sheets","[0-9]+")
Kiểm tra xem "Sheets" có chứa 1 hoặc nhiều số. Do đó, để kết quả là TRUE, phải có ít nhất 1 số.
Kết quả: FALSE
?
Khớp với ký tự hoặc biểu thức con trước "?" xuất hiện 0 hoặc 1 lần. Thường được sử dụng để diễn đạt bất kỳ nội dung nào là tùy chọn.
Lưu ý: Khi "?" được sử dụng sau các ký tự như "{}" và "*" chỉ định ký tự lặp lại, chuỗi ngắn nhất có thể sẽ được khớp (khớp lười).
Công thức: =REGEXMATCH("Sheet","Sheets?")
Trong tình huống này, "?" làm cho "s" trước đó trở thành tùy chọn, có nghĩa là công thức sẽ khớp với "Sheet" hoặc "Sheets".
Kết quả: TRUE
{}
Được sử dụng để kiểm tra số lượng ký tự hoặc biểu thức con trước "{}" được lặp lại. "{n}" có nghĩa là lặp lại n lần ("n" đại diện cho một số). "{n,m}" có nghĩa là lặp lại từ n đến m lần. "{n,}" có nghĩa là lặp lại từ n đến một số lượng vô hạn lần. Lưu ý rằng "n" và "m" phải là số nguyên dương.
Công thức: =REGEXREPLACE("Sheets","e{2}","X")
Hai "e" trong Sheets sẽ được thay thế bằng "X".
Kết quả: ShXts
Biểu thức con
()
Biểu thức trong "()" sẽ trở thành một biểu thức con và sẽ được khớp theo toàn bộ.
Ngoài ra, dấu ngoặc cũng có thể được sử dụng để chụp dữ liệu. Xem Phần 4 để biết thêm thông tin.
Công thức: =REGEXMATCH("12344@hotmail.com","@(hotmail|gmail)\.com")
Kiểm tra xem địa chỉ email có phải là địa chỉ hotmail hoặc Gmail không.
Kết quả: TRUE
Toán tử hoặc
|
Khớp với nội dung trước hoặc sau "|".
Ký tự thoát
\
Khớp với ký tự sau "\". Chủ yếu được sử dụng cho ký tự cũng có ý nghĩa metacharacter. Ví dụ, nếu bạn muốn khớp với một dấu ngoặc, bạn cần nhập "\(". Nếu bạn muốn tìm một dấu chấm, nhập "\.".
Công thức: =REGEXREPLACE("Sheet.Best.Tool","\."," ")
Trong "Sheet.Best.Tool", các dấu chấm sẽ được thay thế bằng khoảng trắng để đọc như văn bản bình thường.
Kết quả: Sheet Best Tool
Neo
^
Khớp với phần đầu chuỗi.
Công thức: =REGEXREPLACE("abc123abc","^abc","ABC")
Trong "abc123abc" "abc" ở phía trước sẽ được thay đổi thành "ABC".
Kết quả: ABC123abc
$
Khớp với phần cuối chuỗi.
Công thức: =REGEXREPLACE("abc123abc","abc$","ABC")
Trong "abc123abc" "abc" ở cuối sẽ được thay đổi thành "ABC".
Kết quả: abc123ABC
Ký tự và bộ ký tự phổ biến
.
Khớp với bất kỳ ký tự nào ngoại trừ dòng ngắt (\n).
S.e khớp với She, S2e, S@e
[a-z]
Khớp với bất kỳ trong 26 chữ cái thường.
Công thức: =REGEXEXTRACT("Sheets","[a-z]+")
Trích xuất tất cả chữ cái thường từ "Sheets".
Kết quả: heets
[^a-z]
Khớp với bất kỳ ký tự nào không phải là chữ cái thường.
Công thức: =REGEXMATCH("sheets","[^a-z]")
Kiểm tra xem có ký tự nào trong "sheets" không phải là chữ cái thường không.
Kết quả: FALSE
[A-Z]
Khớp với bất kỳ trong 26 chữ cái in hoa.
Công thức: =REGEXEXTRACT("Sheets","[A-Z]")
Trích xuất tất cả chữ cái in hoa từ "Sheets".
Kết quả: S
[0-9]
Khớp với bất kỳ số nào từ 0 đến 9.
Công thức: =REGEXMATCH("Sheets","[0-9]")
Kiểm tra xem có số nào trong "Sheets" không.
Kết quả: FALSE
\w
Khớp với bất kỳ ký tự chữ và số nào cũng như dấu gạch dưới. Tương đương với [A-Za-z0-9_].
Công thức: =REGEXEXTRACT("email@mail","\w@\w")
Trích xuất "@" trong "email@mail" và một chữ cái trước và sau nó.
Kết quả: l@m
\W
Khớp với bất kỳ ký tự không phải chữ và số. Tương đương với [^A-Za-z0-9_].
Công thức: =REGEXEXTRACT("email@mail","\W")
Trích xuất nội dung không phải chữ và số từ "email@mail"
Kết quả: @
\d
Khớp với số đầu tiên, tương đương với [0-9].
Công thức: =REGEXEXTRACT("email123@mail","\d")
Trích xuất "1" từ "email123@mail.com" vì chức năng tìm kiếm mặc định tìm kiếm từ trái sang phải.
Kết quả: 1
\D
Khớp với ký tự không phải số đầu tiên, tương đương với [^0-9].
Công thức: =REGEXEXTRACT("email123@mail","\D")
Trích xuất "e" từ "email123@mail.com" vì chức năng tìm kiếm mặc định tìm kiếm từ trái sang phải.
Kết quả: e
\s
Khớp với bất kỳ khoảng trắng nào bao gồm khoảng trắng và dòng ngắt. Tương đương với [\f\n\r\t\v].
Công thức: =REGEXREPLACE("Sheet Best","\s","")
Trong "Sheet Best", tất cả khoảng trắng được xóa.
Kết quả: SheetBest
\S
Khớp với bất kỳ không phải khoảng trắng. Tương đương với [^\f\n\r\t\v].
Công thức: =REGEXREPLACE("Sheet Best","\S","A")
Trong "Sheet Best" tất cả khoảng trắng được thay thế bằng "A".
Kết quả: AAAAA AAAA
\b
Khớp với phân cách từ. Điều này có thể là khoảng trắng trước hoặc sau một từ, hoặc bắt đầu hoặc kết thúc của một câu.
Công thức: =REGEXREPLACE("rico and coco","\bco","AA")
Trong "rico and coco" các từ bắt đầu bằng "co" sẽ được thay thế bằng "AA".
Kết quả: rico and AAco
\B
Khớp với phân cách không phải từ.
Ví dụ, er\B khớp với "er" trong verb nhưng không phải "er" ở cuối never.
\f
Khớp với một dòng ngắt.
-
\t
Khớp với một tab.
-
\v
Khớp với một ký tự tab dọc.
-
4. Tìm xung quanh
Tìm trước và tìm sau, hay còn gọi là tìm xung quanh hoặc khẳng định, được sử dụng để kiểm tra xem phần đầu và phần cuối của một chuỗi có đáp ứng điều kiện cụm từ thông dụng hay không. Hàm không lấy đi chuỗi, mà trả về các kết quả thay thế. Điều kiện Tìm xung quanh cần được đặt trong dấu ngoặc đơn. Hàm hỗ trợ hai phương pháp sau đây:
Loại
Cú pháp
Mô tả
Ví dụ
Positive lookahead
(?=điều kiện regex)
Cú pháp: Cụm từ thông dụng 1(?=biểu thức chính quy 2) khớp và trả về nội dung đáp ứng cụm từ thông dụng 1 và theo sau là nội dung đáp ứng cụm từ thông dụng 2.
Công thức:
=REGEXREPLACE("abc123abc456","abc(?=123)","ABC")
Tìm "abc" trong "abc123abc456" mà được theo sau bởi "123", sau đó được thay thế bằng ABC.
Kết quả: ABC123abc456
Negative lookahead
(?!cụm từ thông dụng)
Cú pháp: Cụm từ thông dụng 1(?!cụm từ thông dụng 2) khớp và trả về nội dung đáp ứng cụm từ thông dụng 1 và theo sau là nội dung không đáp ứng cụm từ thông dụng 2.
Công thức: =REGEXREPLACE("abc123abc456","abc(?!123)","ABC")
Tìm "abc" trong "abc123abc456" mà không được theo sau bởi 123, sau đó được thay thế bằng ABC.
Kết quả: abc123ABC456
5. Nhóm và bắt (sử dụng dấu ngoặc)
Nội dung được đặt trong dấu ngoặc sẽ trở thành một nhóm. Nhóm bao gồm nhóm chụp và nhóm không chụp:
  • Nhóm chụp được sử dụng để khớp và chụp kết quả trong dấu ngoặc.
  • Nhóm không chụp được sử dụng để khớp kết quả mà không chụp, có nghĩa là chúng không thể được sử dụng cho các phép tính phụ.
Danh mục
Cú pháp
Ví dụ công thức
Kết quả
Ghi chú
Không nhóm
-
=REGEXEXTRACT("Mybirthday20220104","birthday2022\d+")
birthday20220104
Trả về kết quả đầy đủ
Nhóm chụp
(Cụm từ thông dụng)
=REGEXEXTRACT("Mybirthday20220104","birthday(2022\d+)")
20220104
Chỉ trả về kết quả trong dấu ngoặc
Nhóm không chụp
(?:Cụm từ thông dụng)
=REGEXEXTRACT("Mybirthday20220104","birthday(?:2022)(\d+)")
0104
Sử dụng (?:) để dẫn khớp nhưng chỉ trả về kết quả trong dấu ngoặc.
Hơn nữa, khi chỉ có nhóm không chụp trong cụm từ thông dụng, kết quả hoàn chỉnh sẽ được trả về.
Dưới đây là một số mẹo nhóm thực tế:
  • Nhóm nhiều:
Khi sử dụng REGEXEXTRACT để trích xuất nội dung, nhiều cột có thể được trích xuất thông qua nhiều nhóm cùng một lúc. Như hình dưới đây, nội dung được nhóm thành ba cột thông qua ba bộ dấu ngoặc.
250px|700px|reset
Hơn nữa, các nhóm có thể được lồng vào nhau (như hình dưới đây). Nhóm lồng nhau có thể được chia thành 4 cột.
250px|700px|reset
  • Tham chiếu trở lại:
Nhập \n sau một nhóm (n phải là một số dương) để hoạt động như một tham chiếu giá trị cho nhóm này, vì vậy bạn có thể sử dụng (.)\1 để khớp hai số lặp lại liên tiếp.
Written by: Lark Help Center
Đã cập nhật vào 2024-04-09
Bài viết này có hữu ích không?
Cảm ơn bạn đã phản hồi!
Cần được trợ giúp thêm? Vui lòng liên hệ Bộ phận hỗ trợ.
rangeDom