Cải thiện bài viết
Lưu bài viết
Cải thiện bài viết
Lưu bài viết
Đọc
Bàn luận This flag allows for case-insensitive matching of the Regular Expression with the given string i.e. expressions like
def myfunc[text, flag=re.NOFLAG]: return re.match[text, flag]4 will match lowercase letters, too. Generally, It’s passed as an optional argument to
def myfunc[text, flag=re.NOFLAG]: return re.match[text, flag]5.
Trong bài viết này, chúng tôi sẽ tìm hiểu về cách sử dụng Python Regex để xác nhận tên bằng cách sử dụng ignorecase.
def myfunc[text, flag=re.NOFLAG]: return re.match[text, flag]
3: Cờ này cho phép khớp không nhạy cảm với biểu thức thông thường với chuỗi đã cho, tức là các biểu thức nhưdef myfunc[text, flag=re.NOFLAG]: return re.match[text, flag]
4 cũng sẽ khớp với các chữ cái viết thường. Nói chung, nó đã được thông qua như một đối số tùy chọn chodef myfunc[text, flag=re.NOFLAG]: return re.match[text, flag]
5.- Hãy cùng xem xét một ví dụ về một biểu mẫu mà người dùng được yêu cầu nhập tên của họ và chúng tôi phải xác nhận nó bằng Regex. Định dạng để nhập tên như sau:
- Ông hoặc bà hoặc bà [một trong hai] theo sau là một không gian duy nhất
- Tên, theo sau là một không gian duy nhất
Examples:
Input : Mr. Albus Severus Potter Output : Valid Input : Lily and Mr. Harry Potter Output : Invalid
Tên đệm [tùy chọn], theo sau là một không gian duy nhất Since, we are using IGNORECASE flag, the first character of First, Second, and Last name may or may not be capital.
Họ [tùy chọn]
Lưu ý: Vì, chúng tôi đang sử dụng cờ ignorecase, ký tự đầu tiên của tên thứ nhất, thứ hai và tên cuối cùng có thể hoặc không thể là vốn.
Dưới đây là mã Python -
def myfunc[text, flag=re.NOFLAG]: return re.match[text, flag]6
def myfunc[text, flag=re.NOFLAG]: return re.match[text, flag]7
a = re.compile[r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X] b = re.compile[r"\d+\.\d*"]8
a = re.compile[r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X] b = re.compile[r"\d+\.\d*"]9
def myfunc[text, flag=re.NOFLAG]: return re.match[text, flag]8
def myfunc[text, flag=re.NOFLAG]: return re.match[text, flag]9
a = re.compile[r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X] b = re.compile[r"\d+\.\d*"]0
a = re.compile[r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X] b = re.compile[r"\d+\.\d*"]1
a = re.compile[r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X] b = re.compile[r"\d+\.\d*"]2
a = re.compile[r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X] b = re.compile[r"\d+\.\d*"]3
a = re.compile[r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X] b = re.compile[r"\d+\.\d*"]4
a = re.compile[r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X] b = re.compile[r"\d+\.\d*"]5
a = re.compile[r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X] b = re.compile[r"\d+\.\d*"]6.
a = re.compile[r"""\d + # the integral part \. # the decimal point \d * # some fractional digits""", re.X] b = re.compile[r"\d+\.\d*"]0
result = re.match[pattern, string]2
result = re.match[pattern, string]3
prog = re.compile[pattern] result = prog.match[string]7
prog = re.compile[pattern] result = prog.match[string]8
result = re.match[pattern, string]6
result = re.match[pattern, string]0
result = re.match[pattern, string]8
result = re.match[pattern, string]9
result = re.match[pattern, string]0
result = re.match[pattern, string]8
>>> re.split[r'\W+', 'Words, words, words.'] ['Words', 'words', 'words', ''] >>> re.split[r'[\W+]', 'Words, words, words.'] ['Words', ', ', 'words', ', ', 'words', '.', ''] >>> re.split[r'\W+', 'Words, words, words.', 1] ['Words', 'words, words.'] >>> re.split['[a-f]+', '0a3B9', flags=re.IGNORECASE] ['0', '3', '9']2
result = re.match[pattern, string]0
result = re.match[pattern, string]8
>>> re.split[r'\W+', 'Words, words, words.'] ['Words', 'words', 'words', ''] >>> re.split[r'[\W+]', 'Words, words, words.'] ['Words', ', ', 'words', ', ', 'words', '.', ''] >>> re.split[r'\W+', 'Words, words, words.', 1] ['Words', 'words, words.'] >>> re.split['[a-f]+', '0a3B9', flags=re.IGNORECASE] ['0', '3', '9']5
result = re.match[pattern, string]0
result = re.match[pattern, string]8
>>> re.split[r'\W+', 'Words, words, words.'] ['Words', 'words', 'words', ''] >>> re.split[r'[\W+]', 'Words, words, words.'] ['Words', ', ', 'words', ', ', 'words', '.', ''] >>> re.split[r'\W+', 'Words, words, words.', 1] ['Words', 'words, words.'] >>> re.split['[a-f]+', '0a3B9', flags=re.IGNORECASE] ['0', '3', '9']8
result = re.match[pattern, string]0
Output:
Valid Invalid Valid valid
Mã nguồn: lib/re/ Lib/re/
Mô -đun này cung cấp các hoạt động khớp biểu thức thường xuyên tương tự như các hoạt động được tìm thấy trong Perl.
Cả hai mẫu và chuỗi sẽ được tìm kiếm có thể là chuỗi Unicode [
Valid Invalid Valid valid00] cũng như các chuỗi 8 bit [
Valid Invalid Valid valid01]. Tuy nhiên, các chuỗi unicode và chuỗi 8 bit không thể được trộn lẫn: nghĩa là, bạn không thể khớp với một chuỗi unicode với mẫu byte hoặc ngược lại; Tương tự, khi yêu cầu thay thế, chuỗi thay thế phải cùng loại với cả mẫu và chuỗi tìm kiếm.
Biểu thức chính quy sử dụng ký tự dấu gạch chéo ngược [
Valid Invalid Valid valid02] để biểu thị các hình thức đặc biệt hoặc cho phép các ký tự đặc biệt được sử dụng mà không cần gọi ý nghĩa đặc biệt của chúng. Điều này va chạm với việc sử dụng Python sườn của cùng một nhân vật cho cùng một mục đích trong các chữ viết; Ví dụ, để phù hợp với một dấu gạch chéo ngược theo nghĩa đen, người ta có thể phải viết
Valid Invalid Valid valid03 dưới dạng chuỗi mẫu, bởi vì biểu thức thông thường phải là
Valid Invalid Valid valid04 và mỗi dấu gạch chéo ngược phải được biểu thị dưới dạng
Valid Invalid Valid valid04 trong một chuỗi python thông thường theo nghĩa đen. Ngoài ra, xin lưu ý rằng bất kỳ trình tự thoát hiểm không hợp lệ nào trong việc sử dụng Python, của dấu gạch chéo ngược trong các chữ viết hiện tại sẽ tạo ra
Valid Invalid Valid valid06 và trong tương lai, điều này sẽ trở thành
Valid Invalid Valid valid07. Hành vi này sẽ xảy ra ngay cả khi đó là một chuỗi thoát hợp lệ cho một biểu thức chính quy.
Giải pháp là sử dụng ký hiệu chuỗi thô Python sườn cho các mẫu biểu thức thông thường; Backslashes không được xử lý theo bất kỳ cách đặc biệt nào trong một chuỗi theo nghĩa đen được đặt trước với
Valid Invalid Valid valid08. Vì vậy,
Valid Invalid Valid valid09 là một chuỗi hai ký tự chứa
Valid Invalid Valid valid02 và
Valid Invalid Valid valid11, trong khi
Valid Invalid Valid valid12 là một chuỗi một ký tự có chứa một dòng mới. Thông thường các mẫu sẽ được thể hiện trong mã Python bằng cách sử dụng ký hiệu chuỗi thô này.
Điều quan trọng cần lưu ý là hầu hết các hoạt động biểu thức chính quy đều có sẵn dưới dạng các hàm và phương thức cấp độ mô-đun trên các biểu thức được biên dịch thông thường. Các chức năng là các phím tắt mà don don yêu cầu bạn biên dịch một đối tượng Regex trước, nhưng bỏ lỡ một số tham số tinh chỉnh.compiled regular expressions. The functions are shortcuts that don’t require you to compile a regex object first, but miss some fine-tuning parameters.
Xem thêm
Mô-đun Regex của bên thứ ba, có API tương thích với mô-đun thư viện tiêu chuẩn
Valid Invalid Valid valid13, nhưng cung cấp chức năng bổ sung và hỗ trợ Unicode kỹ lưỡng hơn.
Biểu thức thông thường cú pháp
Một biểu thức chính quy [hoặc re] chỉ định một tập hợp các chuỗi phù hợp với nó; Các hàm trong mô -đun này cho phép bạn kiểm tra xem một chuỗi cụ thể có khớp với biểu thức chính quy nhất định không [hoặc nếu một biểu thức chính quy nhất định khớp với một chuỗi cụ thể, đi xuống cùng một điều].
Biểu thức thông thường có thể được nối để tạo thành các biểu thức thông thường mới; Nếu A và B đều là biểu thức chính quy, thì AB cũng là một biểu thức chính quy. Nói chung, nếu chuỗi P khớp với A và một chuỗi Q khác khớp với B, chuỗi PQ sẽ khớp với AB. Điều này giữ trừ khi A hoặc B chứa các hoạt động ưu tiên thấp; điều kiện biên giữa a và b; hoặc đã đánh số tài liệu tham khảo nhóm. Do đó, các biểu thức phức tạp có thể dễ dàng được xây dựng từ các biểu thức nguyên thủy đơn giản hơn như các biểu thức được mô tả ở đây. Để biết chi tiết về lý thuyết và thực hiện các biểu thức thường xuyên, hãy tham khảo cuốn sách Friedl [FRIE09] hoặc gần như bất kỳ cuốn sách giáo khoa nào về xây dựng trình biên dịch.[Frie09], or almost any textbook about compiler construction.
Một lời giải thích ngắn gọn về định dạng của các biểu thức thường xuyên sau. Để biết thêm thông tin và một bài thuyết trình nhẹ nhàng hơn, hãy tham khảo ý kiến biểu thức thường xuyên.Regular Expression HOWTO.
Biểu thức chính quy có thể chứa cả các ký tự đặc biệt và thông thường. Hầu hết các ký tự thông thường, như
Valid Invalid Valid valid14,
Valid Invalid Valid valid15 hoặc
Valid Invalid Valid valid16, là các biểu thức chính quy đơn giản nhất; Họ chỉ đơn giản là phù hợp với chính họ. Bạn có thể kết hợp các ký tự thông thường, vì vậy
Valid Invalid Valid valid17 khớp với chuỗi
Valid Invalid Valid valid18. .
Một số ký tự, như
Valid Invalid Valid valid21 hoặc
Valid Invalid Valid valid22, là đặc biệt. Các ký tự đặc biệt là đại diện cho các lớp các ký tự thông thường hoặc ảnh hưởng đến cách các biểu thức chính quy xung quanh chúng được giải thích.
Các toán tử hoặc định lượng lặp lại [
Valid Invalid Valid valid23,
Valid Invalid Valid valid24,
Valid Invalid Valid valid25,
Valid Invalid Valid valid26, v.v.] không thể được lồng trực tiếp. Điều này tránh sự mơ hồ với hậu tố biến đổi không màu xanh lá cây
Valid Invalid Valid valid25 và với các công cụ sửa đổi khác trong các triển khai khác. Để áp dụng sự lặp lại thứ hai cho sự lặp lại bên trong, dấu ngoặc đơn có thể được sử dụng. Ví dụ: biểu thức
Valid Invalid Valid valid28 khớp với bất kỳ bội số nào của sáu ký tự
Valid Invalid Valid valid15.
Các nhân vật đặc biệt là:
Valid Invalid Valid valid30
[Dot.] Trong chế độ mặc định, điều này phù hợp với bất kỳ ký tự nào ngoại trừ dòng mới. Nếu cờ
Valid Invalid Valid valid31 đã được chỉ định, điều này phù hợp với bất kỳ ký tự nào bao gồm cả dòng mới.
Valid Invalid Valid valid32
.
Valid Invalid Valid valid34
Khớp với phần cuối của chuỗi hoặc ngay trước dòng mới ở cuối chuỗi và ở chế độ
Valid Invalid Valid valid33 cũng khớp với một dòng mới.
Valid Invalid Valid valid36 phù hợp với cả ‘foo, và‘ foobar, trong khi biểu thức thông thường
Valid Invalid Valid valid37 chỉ khớp với ‘foo. Thú vị hơn, việc tìm kiếm
Valid Invalid Valid valid38 trong
Valid Invalid Valid valid39 khớp với ‘FOO2, thông thường, nhưng‘ FOO1, ở chế độ
Valid Invalid Valid valid33; Tìm kiếm một
Valid Invalid Valid valid34 trong
Valid Invalid Valid valid42 sẽ tìm thấy hai khớp [trống]: một ngay trước dòng mới và một ở cuối chuỗi.
Valid Invalid Valid valid23
Làm cho RE kết quả khớp với 0 hoặc nhiều sự lặp lại của RE trước đó, càng nhiều lần lặp lại càng tốt.
Valid Invalid Valid valid44 sẽ phù hợp với ‘A,’ ab, hoặc ‘A, sau đó là bất kỳ số lượng‘ Biên.
Valid Invalid Valid valid24
Làm cho RE kết quả phù hợp với 1 hoặc nhiều sự lặp lại của Re trước.
Valid Invalid Valid valid46 sẽ phù hợp với ’A, sau đó là bất kỳ số lượng‘ Biên nào; Nó sẽ không chỉ phù hợp với ’a.
Valid Invalid Valid valid25
Làm cho kết quả RE khớp với 0 hoặc 1 lần lặp lại của Re trước.
Valid Invalid Valid valid48 sẽ phù hợp với ‘A, hoặc‘ AB.
Valid Invalid Valid valid49,
Valid Invalid Valid valid50,
Valid Invalid Valid valid51
Các định lượng
Valid Invalid Valid valid52,
Valid Invalid Valid valid53 và
Valid Invalid Valid valid54 đều tham lam; Họ phù hợp với văn bản càng nhiều càng tốt. Đôi khi hành vi này không phải là mong muốn; Nếu RE
Valid Invalid Valid valid55 được khớp với
Valid Invalid Valid valid56, nó sẽ khớp với toàn bộ chuỗi và không chỉ
Valid Invalid Valid valid57. Thêm
Valid Invalid Valid valid25 sau khi bộ định lượng làm cho nó thực hiện trận đấu theo kiểu không xanh hoặc tối thiểu; Càng ít ký tự càng tốt sẽ được khớp. Sử dụng RE
Valid Invalid Valid valid59 sẽ chỉ khớp với
Valid Invalid Valid valid57.
Valid Invalid Valid valid61,
Valid Invalid Valid valid62,
Valid Invalid Valid valid63
Giống như các bộ định lượng
Valid Invalid Valid valid52,
Valid Invalid Valid valid53 và
Valid Invalid Valid valid54, những người trong đó
Valid Invalid Valid valid53 được nối cũng khớp càng nhiều lần càng tốt. Tuy nhiên, không giống như các bộ định lượng tham lam thực sự, chúng không cho phép theo dõi ngược khi biểu thức theo sau nó không khớp. Chúng được gọi là định lượng sở hữu. Ví dụ,
Valid Invalid Valid valid68 sẽ khớp với
Valid Invalid Valid valid69 vì
Valid Invalid Valid valid70 sẽ phù hợp với tất cả 4
Valid Invalid Valid valid15s, nhưng, khi lần cuối
Valid Invalid Valid valid15 cuối cùng gặp phải, biểu thức được quay lại để cuối cùng
Valid Invalid Valid valid70 kết thúc.
Valid Invalid Valid valid15 cuối cùng. Tuy nhiên, khi
Valid Invalid Valid valid77 được sử dụng để khớp với
Valid Invalid Valid valid69,
Valid Invalid Valid valid79 sẽ khớp với tất cả 4
Valid Invalid Valid valid15, nhưng khi cuối cùng
Valid Invalid Valid valid15 không tìm thấy bất kỳ ký tự nào để phù hợp, biểu thức không thể được quay lại và do đó sẽ không khớp được.
Valid Invalid Valid valid82,
Valid Invalid Valid valid83 và
Valid Invalid Valid valid84 tương đương với
Valid Invalid Valid valid85,
Valid Invalid Valid valid86 và
Valid Invalid Valid valid87 tương ứng.
Valid Invalid Valid valid88
Chỉ định rằng chính xác các bản sao m của RE trước đó phải được khớp; Ít trận đấu hơn khiến toàn bộ RE không phù hợp. Ví dụ:
Valid Invalid Valid valid89 sẽ khớp chính xác sáu ký tự ____115, nhưng không phải năm ký tự.
Valid Invalid Valid valid26
Làm cho RE kết quả phù hợp từ M đến N lặp lại của RE trước đó, cố gắng khớp với càng nhiều lần lặp lại càng tốt. Ví dụ:
Valid Invalid Valid valid92 sẽ khớp từ 3 đến 5
Valid Invalid Valid valid15 ký tự. Bỏ qua M chỉ định giới hạn dưới bằng 0 và bỏ qua N chỉ định giới hạn trên vô hạn. Ví dụ,
Valid Invalid Valid valid94 sẽ khớp với
Valid Invalid Valid valid95 hoặc một nghìn ký tự
Valid Invalid Valid valid15 theo sau là
Valid Invalid Valid valid97, nhưng không phải
Valid Invalid Valid valid98. Dấu phẩy có thể không bị bỏ qua hoặc công cụ sửa đổi sẽ bị nhầm lẫn với mẫu được mô tả trước đó.
Valid Invalid Valid valid99
Làm cho RE kết quả phù hợp từ M đến N lặp lại của Re trước, cố gắng khớp với càng ít sự lặp lại càng tốt. Đây là phiên bản không màu xanh của bộ định lượng trước đó. Ví dụ: trên chuỗi 6 ký tự
>>> import re >>> m = re.search['[?>> import re >>> m = re.search['[?