Hướng dẫn what is forward slash in regex in python? - Dấu gạch chéo trong regex trong python là gì?

Các nhân vật đặc biệt như The Slash phải được thoát ra với một dấu gạch chéo.

Để phù hợp cho đến khi một ký tự cụ thể xảy ra sử dụng

prog = re.compile(pattern)
result = prog.match(string)
0 hoặc
prog = re.compile(pattern)
result = prog.match(string)
1 được ký tự bởi ký tự đó. Bởi vì những người đó là tham lam (thuật ngữ nên được xử lý bởi mỗi regex tuturioal), hãy nối một
prog = re.compile(pattern)
result = prog.match(string)
2.

Vì vậy, Regex cuối cùng có thể là:

(dd300\/.+?,)

Các dấu ngoặc đơn chỉ cần thiết khi bạn cần truy cập vào chuỗi phù hợp.

Tùy thuộc vào đầu vào của bạn, bạn cũng có thể sử dụng Regex cụ thể hơn. Ví dụ, nếu

prog = re.compile(pattern)
result = prog.match(string)
3 luôn bị theo dõi bởi hai số phân tách

(dd300\/\d+\/\d+,)

trong đó

prog = re.compile(pattern)
result = prog.match(string)
4 chỉ định bất kỳ chữ số nào giống như sử dụng
prog = re.compile(pattern)
result = prog.match(string)
5.

Mã nguồn: lib/re.py Lib/re.py


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 cũng như các chuỗi 8 bit. 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 (

prog = re.compile(pattern)
result = prog.match(string)
6) để 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
prog = re.compile(pattern)
result = prog.match(string)
7 dưới dạng chuỗi mẫu, bởi vì biểu thức thông thường phải là
prog = re.compile(pattern)
result = prog.match(string)
8 và mỗi dấu gạch chéo ngược phải được biểu thị dưới dạng
prog = re.compile(pattern)
result = prog.match(string)
8 bên trong một chuỗi python thông thường theo nghĩa đen.

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

result = re.match(pattern, string)
0. Vì vậy,
result = re.match(pattern, string)
1 là một chuỗi hai ký tự chứa
prog = re.compile(pattern)
result = prog.match(string)
6 và
result = re.match(pattern, string)
3, trong khi
result = re.match(pattern, string)
4 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

result = re.match(pattern, string)
5, nhưng cung cấp chức năng bổ sung và hỗ trợ Unicode kỹ lưỡng hơn.

6.2.1. 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 xuyên 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 được tham chiếu ở trên, hoặc gần như bất kỳ sách giáo khoa nào về xây dựng trình biên dịch.

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ư

result = re.match(pattern, string)
6,
result = re.match(pattern, string)
7 hoặc
result = re.match(pattern, string)
8, 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
result = re.match(pattern, string)
9 khớp với chuỗi
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
0. .

Một số ký tự, như

a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
3 hoặc
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
4, 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 chuỗi mẫu biểu thức chính quy có thể không chứa các byte null, nhưng có thể chỉ định byte null bằng ký hiệu
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
5 như
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
6.

Vòng loại lặp lại (

a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
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,
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
0, 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
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
9 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
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
2 khớp với bất kỳ bội số nào của sáu ký tự
result = re.match(pattern, string)
7.

Các nhân vật đặc biệt là:

________ 84 (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ừ một dòng mới. Nếu cờ
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
5 đã đượ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 .________ 86 (CARET.) Khả năng bắt đầu chuỗi và ở chế độ
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
7 cũng khớp ngay sau mỗi dòng mới. Ở cuối chuỗi và trong chế độ
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
7 cũng khớp với một dòng mới.
>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
0 khớp với cả ‘foo, và‘ foobar, trong khi biểu thức thông thường
>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
1 chỉ khớp với ‘foo. Thú vị hơn, việc tìm kiếm
>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
2 trong
>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
3 phù hợp với foo2, thông thường, nhưng ‘foo1, ở chế độ
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
7; Tìm kiếm một
>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
5 trong
>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
6 sẽ tìm thấy hai (trống) phù hợp: một ngay trước dòng mới và một ở cuối chuỗi. khả thi.
>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
8 sẽ phù hợp với ‘A,’ ab, hoặc ‘A, sau đó là bất kỳ số lượng‘ B ,.________ 99Caus kết quả kết quả để khớp với 1 hoặc nhiều sự lặp lại của Re trước.
(dd300\/\d+\/\d+,)
00 sẽ phù hợp với ’A, sau đó là bất kỳ số lượng‘ Biên nào; Nó sẽ không chỉ khớp với ‘A
(dd300\/\d+\/\d+,)
02 sẽ phù hợp với ’A, hoặc‘ AB ,.____________ 103,
(dd300\/\d+\/\d+,)
04,
(dd300\/\d+\/\d+,)
05the
>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
7,
>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
9 và
(dd300\/\d+\/\d+,)
01 Vòng loại đề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
(dd300\/\d+\/\d+,)
09 được khớp với
(dd300\/\d+\/\d+,)
10, nó sẽ khớp với toàn bộ chuỗi và không chỉ
(dd300\/\d+\/\d+,)
11. Thêm
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
9 sau khi vòng loại 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
(dd300\/\d+\/\d+,)
13 sẽ chỉ khớp với ________ 111 ​​.____ 115 chỉ định rằng chính xác các bản sao 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ụ,
(dd300\/\d+\/\d+,)
16 sẽ khớp chính xác sáu ký tự ____67, nhưng không phải năm .____ 80 Ví dụ:
(dd300\/\d+\/\d+,)
19 sẽ khớp từ 3 đến 5
result = re.match(pattern, string)
7 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ụ,
(dd300\/\d+\/\d+,)
21 sẽ khớp với
(dd300\/\d+\/\d+,)
22 hoặc một nghìn ký tự
result = re.match(pattern, string)
7 theo sau là
(dd300\/\d+\/\d+,)
24, nhưng không phải
(dd300\/\d+\/\d+,)
25. 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 đó .________ 126Causes kết quả 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 vòng loại trước. Ví dụ: trên chuỗi 6 ký tự
(dd300\/\d+\/\d+,)
27,
(dd300\/\d+\/\d+,)
19 sẽ khớp với 5
result = re.match(pattern, string)
7 ký tự, trong khi
(dd300\/\d+\/\d+,)
30 sẽ chỉ khớp với 3 ký tự .________ 56

Hoặc thoát khỏi các ký tự đặc biệt (cho phép bạn khớp các ký tự như

>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']
7,
(dd300\/\d+\/\d+,)
01, v.v.) hoặc báo hiệu một chuỗi đặc biệt; Trình tự đặc biệt được thảo luận dưới đây.

Nếu bạn không sử dụng một chuỗi thô để diễn đạt mẫu, hãy nhớ rằng Python cũng sử dụng dấu gạch chéo ngược như một chuỗi thoát trong các chữ viết; Nếu trình tự thoát được công nhận bởi trình phân tích cú pháp Python, thì dấu gạch chéo ngược và ký tự tiếp theo được bao gồm trong chuỗi kết quả. Tuy nhiên, nếu Python sẽ nhận ra chuỗi kết quả, dấu gạch chéo ngược nên được lặp lại hai lần. Điều này rất phức tạp và khó hiểu, vì vậy, nó rất khuyến khích bạn sử dụng các chuỗi thô cho tất cả nhưng các biểu thức đơn giản nhất.

(dd300\/\d+\/\d+,)
34

Được sử dụng để chỉ ra một tập hợp các ký tự. Trong một tập hợp:

  • Các ký tự có thể được liệt kê riêng lẻ, ví dụ:
    (dd300\/\d+\/\d+,)
    35 sẽ khớp với
    result = re.match(pattern, string)
    
    7,
    (dd300\/\d+\/\d+,)
    37 hoặc
    (dd300\/\d+\/\d+,)
    38.
  • Các phạm vi của các ký tự có thể được chỉ định bằng cách đưa hai ký tự và tách chúng bằng
    (dd300\/\d+\/\d+,)
    39, ví dụ
    (dd300\/\d+\/\d+,)
    40 sẽ khớp với bất kỳ chữ cái viết thường nào,
    (dd300\/\d+\/\d+,)
    41 sẽ khớp với tất cả các số hai chữ số từ
    (dd300\/\d+\/\d+,)
    42 với
    (dd300\/\d+\/\d+,)
    43 và
    (dd300\/\d+\/\d+,)
    44 sẽ khớp với bất kỳ số hình lục giác nào. Nếu
    (dd300\/\d+\/\d+,)
    45 được thoát ra (ví dụ:
    (dd300\/\d+\/\d+,)
    46) hoặc nếu nó được đặt là ký tự đầu tiên hoặc cuối cùng (ví dụ:
    (dd300\/\d+\/\d+,)
    47), nó sẽ khớp với một
    (dd300\/\d+\/\d+,)
    39 theo nghĩa đen.
  • Các nhân vật đặc biệt mất ý nghĩa đặc biệt của họ bên trong bộ. Ví dụ:
    (dd300\/\d+\/\d+,)
    49 sẽ phù hợp với bất kỳ ký tự nghĩa đen nào
    a = re.compile(r"""\d +  # the integral part
                       \.    # the decimal point
                       \d *  # some fractional digits""", re.X)
    b = re.compile(r"\d+\.\d*")
    
    4,
    >>> re.split('(\W+)', '...words, words...')
    ['', '...', 'words', ', ', 'words', '...', '']
    
    9,
    >>> re.split('(\W+)', '...words, words...')
    ['', '...', 'words', ', ', 'words', '...', '']
    
    7 hoặc
    (dd300\/\d+\/\d+,)
    53.
  • Các lớp ký tự như
    (dd300\/\d+\/\d+,)
    54 hoặc
    (dd300\/\d+\/\d+,)
    55 (được định nghĩa bên dưới) cũng được chấp nhận bên trong một bộ, mặc dù các ký tự mà chúng khớp phụ thuộc vào việc chế độ
    (dd300\/\d+\/\d+,)
    56 hay
    (dd300\/\d+\/\d+,)
    57 có hiệu lực hay không.
  • Các ký tự không nằm trong phạm vi có thể được khớp bằng cách bổ sung cho tập hợp. Nếu ký tự đầu tiên của bộ là
    >>> re.split('\W+', 'Words, words, words.')
    ['Words', 'words', 'words', '']
    >>> re.split('(\W+)', 'Words, words, words.')
    ['Words', ', ', 'words', ', ', 'words', '.', '']
    >>> re.split('\W+', 'Words, words, words.', 1)
    ['Words', 'words, words.']
    >>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
    ['0', '3', '9']
    
    6, tất cả các ký tự không có trong tập hợp sẽ được khớp. Ví dụ:
    (dd300\/\d+\/\d+,)
    59 sẽ khớp với bất kỳ ký tự nào ngoại trừ
    (dd300\/\d+\/\d+,)
    60 và
    (dd300\/\d+\/\d+,)
    61 sẽ khớp với bất kỳ ký tự nào ngoại trừ
    >>> re.split('\W+', 'Words, words, words.')
    ['Words', 'words', 'words', '']
    >>> re.split('(\W+)', 'Words, words, words.')
    ['Words', ', ', 'words', ', ', 'words', '.', '']
    >>> re.split('\W+', 'Words, words, words.', 1)
    ['Words', 'words, words.']
    >>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
    ['0', '3', '9']
    
    6.
    (dd300\/\d+\/\d+,)
    63 không có ý nghĩa đặc biệt nếu nó không phải là ký tự đầu tiên trong tập hợp.
  • Để phù hợp với một
    (dd300\/\d+\/\d+,)
    64 theo nghĩa đen bên trong một bộ, đi trước nó với một dấu gạch chéo ngược hoặc đặt nó vào đầu bộ. Ví dụ, cả
    (dd300\/\d+\/\d+,)
    65 và
    (dd300\/\d+\/\d+,)
    66 sẽ phù hợp với dấu ngoặc đơn.
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
3
(dd300\/\d+\/\d+,)
68, trong đó A và B có thể là res tùy ý, tạo ra một biểu thức chính quy sẽ khớp với A hoặc B. Một số lượng RES tùy ý có thể được phân tách bằng
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
3 theo cách này. Điều này có thể được sử dụng bên trong các nhóm (xem bên dưới) là tốt. Khi chuỗi đích được quét, độ phân tách bởi
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
3 được thử từ trái sang phải. Khi một mẫu hoàn toàn phù hợp, nhánh đó được chấp nhận. Điều này có nghĩa là một khi
(dd300\/\d+\/\d+,)
71 khớp,
(dd300\/\d+\/\d+,)
72 sẽ không được kiểm tra thêm, ngay cả khi nó sẽ tạo ra một trận đấu tổng thể dài hơn. Nói cách khác, toán tử
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
3 không bao giờ tham lam. Để phù hợp với một
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
3 theo nghĩa đen, sử dụng
(dd300\/\d+\/\d+,)
75 hoặc đặt nó bên trong một lớp ký tự, như trong ____ 176 .____ ____ 177Matches bất kỳ biểu thức chính quy nào nằm trong dấu ngoặc đơn, và chỉ ra sự khởi đầu và kết thúc của một nhóm; Nội dung của một nhóm có thể được truy xuất sau khi một trận đấu được thực hiện và có thể được khớp sau trong chuỗi với chuỗi đặc biệt
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
5, được mô tả bên dưới. Để phù hợp với các chữ
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
4 hoặc
(dd300\/\d+\/\d+,)
53, hãy sử dụng
(dd300\/\d+\/\d+,)
81 hoặc
(dd300\/\d+\/\d+,)
82 hoặc gửi chúng bên trong một lớp ký tự: ________ 183 .____ 184 Đây là một ký hiệu mở rộng (một
(dd300\/\d+\/\d+,)
01 sau
a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
4 không có ý nghĩa). Nhân vật đầu tiên sau
(dd300\/\d+\/\d+,)
01 xác định ý nghĩa và cú pháp tiếp theo của cấu trúc là gì. Phần mở rộng thường không tạo ra một nhóm mới;
(dd300\/\d+\/\d+,)
88 là ngoại lệ duy nhất cho quy tắc này. Sau đây là các tiện ích mở rộng được hỗ trợ hiện đang được hỗ trợ .________ 189 (một hoặc nhiều chữ cái từ bộ
result = re.match(pattern, string)
7,
(dd300\/\d+\/\d+,)
91,
(dd300\/\d+\/\d+,)
92,
(dd300\/\d+\/\d+,)
37,
(dd300\/\d+\/\d+,)
94,
(dd300\/\d+\/\d+,)
95,
(dd300\/\d+\/\d+,)
96.) Các chữ cái đặt các cờ tương ứng:
(dd300\/\d+\/\d+,)
97 (khớp ASCII-chỉ),
(dd300\/\d+\/\d+,)
98 (trường hợp bỏ qua),
(dd300\/\d+\/\d+,)
99 (phụ thuộc vào ngôn ngữ),
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
00 (đa dòng),
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
01 (DOT khớp với tất cả biểu hiện thông thường. . Cờ nên được sử dụng đầu tiên trong chuỗi biểu thức .________ 204A Phiên bản không bắt giữ của dấu ngoặc đơn thông thường. Khớp với bất kỳ biểu thức chính quy nào nằm trong dấu ngoặc đơn, nhưng không thể lấy được chuỗi con phù hợp sau khi thực hiện một trận đấu hoặc được tham chiếu sau trong mẫu .________ 205Module Contents.) This is useful if you wish to include the flags as part of the regular expression, instead of passing a flag argument to the
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
03 function. Flags should be used first in the expression string.
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
04A non-capturing version of regular parentheses. Matches whatever regular expression is inside the parentheses, but the substring matched by the group cannot be retrieved after performing a match or referenced later in the pattern.
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
05

. -line),

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
01 (DOT khớp với tất cả) và
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
02 (verbose), cho phần của biểu thức. (Các cờ được mô tả trong nội dung mô -đun.)Module Contents.)

Mới trong phiên bản 3.6.

(dd300\/\d+\/\d+,)
88

Tương tự như dấu ngoặc đơn thông thường, nhưng phần phụ được khớp với tên nhóm có thể truy cập thông qua tên nhóm tượng trưng. Tên nhóm phải là định danh Python hợp lệ và mỗi tên nhóm chỉ được xác định một lần trong một biểu thức chính quy. Một nhóm tượng trưng cũng là một nhóm được đánh số, giống như nhóm không được đặt tên.

Các nhóm được đặt tên có thể được tham chiếu trong ba bối cảnh. Nếu mẫu là

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
16 (nghĩa là khớp một chuỗi được trích dẫn với trích dẫn đơn hoặc đôi):

Bối cảnh tham khảo về nhóm Trích dẫnCác cách để tham khảo nó
trong cùng một mẫu
  • >>> import re
    >>> m = re.search('(?<=abc)def', 'abcdef')
    >>> m.group(0)
    'def'
    
    17 (như được hiển thị)
  • >>> import re
    >>> m = re.search('(?<=abc)def', 'abcdef')
    >>> m.group(0)
    'def'
    
    18
Khi xử lý đối tượng khớp
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
19
  • >>> import re
    >>> m = re.search('(?<=abc)def', 'abcdef')
    >>> m.group(0)
    'def'
    
    20
  • >>> import re
    >>> m = re.search('(?<=abc)def', 'abcdef')
    >>> m.group(0)
    'def'
    
    21 (v.v.)
Trong một chuỗi được chuyển đến đối số
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
22 của
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
23
  • >>> import re
    >>> m = re.search('(?<=abc)def', 'abcdef')
    >>> m.group(0)
    'def'
    
    24
  • >>> import re
    >>> m = re.search('(?<=abc)def', 'abcdef')
    >>> m.group(0)
    'def'
    
    25
  • >>> import re
    >>> m = re.search('(?<=abc)def', 'abcdef')
    >>> m.group(0)
    'def'
    
    18
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
27A Backreference cho một nhóm được đặt tên; Nó phù hợp với bất kỳ văn bản nào được khớp với tên nhóm trước đó. Nội dung của dấu ngoặc đơn chỉ bị bỏ qua .________ 229Matches nếu
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
30 khớp với tiếp theo, nhưng không tiêu thụ bất kỳ chuỗi nào. Đây được gọi là một khẳng định lookahead. Ví dụ:
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
31 sẽ khớp với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
32 chỉ khi nó theo sau là ________ 233 .____ ____ 234Matches nếu
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
30 không khớp với tiếp theo. Đây là một khẳng định cái nhìn tiêu cực. Ví dụ:
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
36 sẽ khớp với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
32 chỉ khi nó không theo sau bởi ____ 233 .________ 239

Khớp nếu vị trí hiện tại trong chuỗi được đi trước bởi một trận đấu cho

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
30 kết thúc ở vị trí hiện tại. Điều này được gọi là một khẳng định tầm nhìn tích cực.
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
41 sẽ tìm thấy một trận đấu trong
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
42, vì Lookbehind sẽ sao lưu 3 ký tự và kiểm tra xem mẫu chứa có khớp không. Mẫu chứa chỉ phải khớp với các chuỗi có độ dài cố định, nghĩa là
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
43 hoặc
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
44 được cho phép, nhưng không phải là
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
45 và
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
46. Lưu ý rằng các mẫu bắt đầu với các xác nhận Lookehind tích cực sẽ không khớp khi bắt đầu chuỗi được tìm kiếm; Rất có thể bạn sẽ muốn sử dụng chức năng
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 thay vì hàm
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
48:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'

Ví dụ này tìm kiếm một từ sau một dấu gạch nối:

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'

Đã thay đổi trong phiên bản 3.5: Đã thêm hỗ trợ cho các tài liệu tham khảo nhóm có độ dài cố định.Added support for group references of fixed length.

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
49Matches Nếu vị trí hiện tại trong chuỗi không đi trước một trận đấu cho
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
30. Đây được gọi là một khẳng định tiêu cực. Tương tự như các khẳng định hướng tích cực, mẫu chứa chỉ phải khớp với một số chuỗi có độ dài cố định. Các mẫu bắt đầu với các khẳng định trông tiêu cực có thể khớp với đầu chuỗi được tìm kiếm .________ 251 sẽ cố gắng khớp với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
52 nếu nhóm có ID hoặc tên đã cho và với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
53 nếu không có.
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
53 là tùy chọn và có thể được bỏ qua. Ví dụ:
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
55 là một mẫu khớp email kém, sẽ phù hợp với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
56 cũng như
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
57, nhưng không phải với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
58 cũng như
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
59.

Các chuỗi đặc biệt bao gồm

prog = re.compile(pattern)
result = prog.match(string)
6 và một ký tự từ danh sách dưới đây. Nếu ký tự thông thường không phải là chữ số ASCII hoặc chữ ASCII, thì kết quả sẽ phù hợp với ký tự thứ hai. Ví dụ,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
61 khớp với ký tự
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
8.

a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")
5Matches Nội dung của nhóm cùng một số. Các nhóm được đánh số bắt đầu từ 1. Ví dụ:
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
64 khớp với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
65 hoặc
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
66, nhưng không phải
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
67 (lưu ý không gian sau nhóm). Trình tự đặc biệt này chỉ có thể được sử dụng để phù hợp với một trong 99 nhóm đầu tiên. Nếu chữ số đầu tiên của số là 0, hoặc số dài 3 chữ số, nó sẽ không được hiểu là khớp nhóm, nhưng là ký tự có số giá trị bát phân. Bên trong
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
68 và
(dd300\/\d+\/\d+,)
64 của một lớp ký tự, tất cả các lối thoát số được coi là ký tự .________ 270Matches chỉ khi bắt đầu chuỗi.

Khớp với chuỗi trống, nhưng chỉ ở đầu hoặc cuối của một từ. Một từ được định nghĩa là một chuỗi các ký tự chữ và số unicode hoặc dấu gạch dưới, do đó, phần cuối của một từ được biểu thị bằng không gian trắng hoặc ký tự Unicode không phải là số đồngumeric, không phải. Lưu ý rằng chính thức,

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
71 được định nghĩa là ranh giới giữa ký tự
(dd300\/\d+\/\d+,)
54 và
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
74 (hoặc ngược lại) hoặc giữa
(dd300\/\d+\/\d+,)
54 và đầu/đầu của chuỗi. Điều này có nghĩa là
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
76 khớp với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
77,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
78,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
79,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
80 nhưng không phải
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
81 hoặc
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
82.

Theo mặc định Unicode Alphanumerics là những cái được sử dụng, nhưng điều này có thể được thay đổi bằng cách sử dụng cờ

(dd300\/\d+\/\d+,)
56. Bên trong một phạm vi ký tự,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
71 đại diện cho ký tự backspace, để tương thích với các chữ Python.

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
85Matches chuỗi trống, nhưng chỉ khi nó không ở đầu hoặc cuối của một từ. Điều này có nghĩa là
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
86 khớp với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
87,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
88,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
89, nhưng không phải
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
90,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
91 hoặc
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
92.
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
85 hoàn toàn trái ngược với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
71, vì vậy các ký tự từ là bảng chữ cái unicode hoặc dấu gạch dưới, mặc dù điều này có thể được thay đổi bằng cách sử dụng cờ
(dd300\/\d+\/\d+,)
56. loại [nd]). Điều này bao gồm
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
97, và nhiều ký tự chữ số khác. Nếu cờ
(dd300\/\d+\/\d+,)
56 chỉ được sử dụng
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
97 được khớp (nhưng cờ ảnh hưởng đến toàn bộ biểu thức chính quy, vì vậy trong các trường hợp như vậy sử dụng
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
97 rõ ràng có thể là một lựa chọn tốt hơn). Cho các mẫu 8 bit (byte): khớp với bất kỳ chữ số thập phân nào; Điều này tương đương với ________ 297 .____ ____ 302Matches bất kỳ ký tự nào không phải là chữ số thập phân Unicode. Đây là điều ngược lại với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
96. Nếu cờ
(dd300\/\d+\/\d+,)
56 được sử dụng, điều này sẽ trở thành tương đương với
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
05 (nhưng cờ ảnh hưởng đến toàn bộ biểu thức chính quy, vì vậy trong những trường hợp như vậy sử dụng
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
05 rõ ràng có thể là lựa chọn tốt hơn).
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
07 cho các mẫu Unicode (STR): khớp với các ký tự khoảng trắng Unicode (bao gồm
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
08, và cũng có nhiều ký tự khác, ví dụ như các không gian không phá vỡ được ủy quyền bởi các quy tắc kiểu chữ bằng nhiều ngôn ngữ). Nếu cờ
(dd300\/\d+\/\d+,)
56 được sử dụng, chỉ
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
08 được khớp (nhưng cờ ảnh hưởng đến toàn bộ biểu thức chính quy, vì vậy trong các trường hợp như vậy sử dụng
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
08 rõ ràng có thể là một lựa chọn tốt hơn). Bộ ký tự ASCII; Điều này tương đương với ________ 308 .__ 155matches bất kỳ ký tự nào không phải là ký tự Whitespace Unicode. Đây là điều ngược lại với
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
07. Nếu cờ
(dd300\/\d+\/\d+,)
56 được sử dụng, điều này sẽ trở thành tương đương với
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
16 (nhưng cờ ảnh hưởng đến toàn bộ biểu thức chính quy, vì vậy trong các trường hợp như vậy sử dụng
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
16 rõ ràng có thể là lựa chọn tốt hơn). Điều này bao gồm hầu hết các ký tự có thể là một phần của một từ trong bất kỳ ngôn ngữ nào, cũng như các số và dấu gạch dưới. Nếu cờ
(dd300\/\d+\/\d+,)
56 được sử dụng, chỉ
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
20 được khớp (nhưng cờ ảnh hưởng đến toàn bộ biểu thức chính quy, vì vậy trong các trường hợp như vậy sử dụng
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
20 rõ ràng có thể là một lựa chọn tốt hơn). Bộ ký tự ASCII; Điều này tương đương với ________ 320 .__ 274matches bất kỳ ký tự nào không phải là ký tự từ Unicode. Đây là điều ngược lại với
(dd300\/\d+\/\d+,)
54. Nếu cờ
(dd300\/\d+\/\d+,)
56 được sử dụng, điều này sẽ trở thành tương đương với
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
26 (nhưng cờ ảnh hưởng đến toàn bộ biểu thức chính quy, do đó, trong các trường hợp như vậy sử dụng
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
26 rõ ràng có thể là lựa chọn tốt hơn) .________ 328Match chỉ ở cuối chuỗi.

Hầu hết các ESCAPES tiêu chuẩn được hỗ trợ bởi các chuỗi chuỗi Python cũng được chấp nhận bởi trình phân tích cú pháp biểu thức thông thường:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\

.

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
30 và
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
31 Trình tự thoát chỉ được nhận ra trong các mẫu Unicode. Trong các mẫu byte, chúng không được đối xử đặc biệt.

Escapes octal được bao gồm trong một hình thức giới hạn. Nếu chữ số đầu tiên là 0, hoặc nếu có ba chữ số bát phân, thì nó được coi là một lối thoát bát phân. Nếu không, nó là một tham chiếu nhóm. Đối với các chuỗi chữ, thoát hiểm luôn luôn có chiều dài tối đa ba chữ số.

Thay đổi trong phiên bản 3.3: Trình tự thoát

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
30 và
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
31 đã được thêm vào.The
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
30 and
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
31 escape sequences have been added.

Đã thay đổi trong phiên bản 3.6: Các lối thoát chưa biết bao gồm

prog = re.compile(pattern)
result = prog.match(string)
6 và một chữ cái ASCII hiện là lỗi.Unknown escapes consisting of
prog = re.compile(pattern)
result = prog.match(string)
6 and an ASCII letter now are errors.

Xem thêm

Làm chủ các biểu thức thường xuyên trên các biểu thức thông thường của Jeffrey Friedl, được xuất bản bởi O hèReilly. Phiên bản thứ hai của cuốn sách không còn bao gồm Python, nhưng phiên bản đầu tiên bao gồm viết các mẫu biểu thức chính quy tốt rất chi tiết.

6.2.2. Nội dung mô -đun

Mô -đun xác định một số chức năng, hằng số và một ngoại lệ. Một số chức năng là phiên bản đơn giản hóa của các phương thức nổi bật đầy đủ cho các biểu thức thông thường được biên dịch. Hầu hết các ứng dụng không tầm thường luôn sử dụng biểu mẫu được biên dịch.

Đã thay đổi trong phiên bản 3.6: Hằng số cờ hiện là các trường hợp là

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
35, là một lớp con của
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
36.Flag constants are now instances of
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
35, which is a subclass of
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
36.

________ 337 ________ 338 (mẫu, cờ = 0) ¶(pattern, flags=0)

Biên dịch một mẫu biểu thức chính quy thành một đối tượng biểu thức chính quy, có thể được sử dụng để kết hợp bằng cách sử dụng

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
48,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 và các phương pháp khác, được mô tả dưới đây.regular expression object, which can be used for matching using its
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
48,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 and other methods, described below.

Hành vi biểu thức có thể được sửa đổi bằng cách chỉ định giá trị cờ. Các giá trị có thể là bất kỳ biến nào sau đây, kết hợp bằng bitwise hoặc (toán tử ____341).

Trình tự

prog = re.compile(pattern)
result = prog.match(string)

tương đương với

result = re.match(pattern, string)

Nhưng sử dụng

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
03 và lưu đối tượng biểu thức chính quy kết quả để sử dụng lại hiệu quả hơn khi biểu thức sẽ được sử dụng nhiều lần trong một chương trình.

Ghi chú

Các phiên bản được biên dịch của các mẫu gần đây nhất được chuyển đến

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
03 và các hàm khớp cấp mô-đun được lưu trữ, vì vậy các chương trình chỉ sử dụng một vài biểu thức thông thường tại một thời điểm cần phải lo lắng về việc biên dịch các biểu thức chính quy.

________ 337 ________ 345¶ ________ 337 ________ 347¶

Tạo

(dd300\/\d+\/\d+,)
54,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
74,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
71,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
85,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
96,
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
02,
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
07 và
(dd300\/\d+\/\d+,)
55 thực hiện kết hợp ASCII-chỉ khớp thay vì khớp unicode đầy đủ. Điều này chỉ có ý nghĩa đối với các mẫu Unicode và bị bỏ qua cho các mẫu byte.

Lưu ý rằng để tương thích ngược, cờ

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
56 vẫn tồn tại (cũng như từ đồng nghĩa của nó
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
57 và đối tác nhúng của nó ).

________ 337 ________ 360¶

Hiển thị thông tin gỡ lỗi về biểu thức biên dịch.

________ 337 ________ 362¶ ________ 337 ________ 364¶

Thực hiện kết hợp không nhạy cảm trường hợp; Biểu thức như

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
65 cũng sẽ phù hợp với các chữ cái viết thường. Địa điểm hiện tại không thay đổi ảnh hưởng của cờ này. Kết hợp unicode đầy đủ (chẳng hạn như
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
66 khớp
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
67) cũng hoạt động trừ khi cờ
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
68 cũng được sử dụng để vô hiệu hóa các trận đấu không ASCII.

________ 337 ________ 370¶ ________ 337 ________ 372¶

Tạo

(dd300\/\d+\/\d+,)
54,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
74,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
71,
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
85,
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
07 và
(dd300\/\d+\/\d+,)
55 phụ thuộc vào địa phương hiện tại. Việc sử dụng lá cờ này không được khuyến khích vì cơ chế địa phương rất không đáng tin cậy và dù sao nó cũng chỉ xử lý một nền văn hóa của người Hồi giáo tại một thời điểm; Thay vào đó, bạn nên sử dụng Unicode khớp, đây là mặc định trong Python 3 cho các mẫu Unicode (STR). Cờ này chỉ có thể được sử dụng với các mẫu byte.

Đã thay đổi trong phiên bản 3.6:

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
79 chỉ có thể được sử dụng với các mẫu byte và không tương thích với
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
68.
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
79 can be used only with bytes patterns and is not compatible with
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
68.

________ 337 ________ 382¶ ________ 337 ________ 384¶

Khi được chỉ định, ký tự mẫu

>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
6 khớp ở đầu chuỗi và ở đầu mỗi dòng (ngay sau mỗi dòng mới); và ký tự mẫu
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
8 khớp ở cuối chuỗi và ở cuối mỗi dòng (ngay trước mỗi dòng mới). Theo mặc định,
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
6 chỉ khớp với đầu chuỗi và
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
8 chỉ ở cuối chuỗi và ngay trước dòng mới (nếu có) ở cuối chuỗi.

________ 337 ________ 390¶ ________ 337 ________ 392¶

Làm cho nhân vật đặc biệt

>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
4 khớp với bất kỳ nhân vật nào, bao gồm cả dòng mới; Không có cờ này,
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
4 sẽ khớp với bất cứ điều gì ngoại trừ một dòng mới.

________ 337 ________ 396¶ ________ 337 ________ 398¶

Cờ này cho phép bạn viết các biểu thức thông thường trông đẹp hơn và dễ đọc hơn bằng cách cho phép bạn các phần logic tách biệt trực quan của mẫu và thêm nhận xét. Khoảng trắng trong mẫu bị bỏ qua, ngoại trừ khi trong một lớp ký tự hoặc khi đi trước bởi một dấu gạch chéo ngược không được phân loại. Khi một dòng chứa một

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
99 không nằm trong một lớp ký tự và không được đặt trước bởi một dấu gạch chéo ngược không được phân loại, tất cả các ký tự từ
>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
99 đến cuối cùng bên trái cho đến cuối dòng đều bị bỏ qua.

Điều này có nghĩa là hai đối tượng biểu thức chính quy sau phù hợp với số thập phân có chức năng bằng nhau:

a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
b = re.compile(r"\d+\.\d*")

________ 337 ________ 402 (mẫu, chuỗi, cờ = 0) ¶(pattern, string, flags=0)

Quét qua chuỗi Tìm kiếm vị trí đầu tiên nơi mẫu biểu thức chính quy tạo ra một khớp và trả về một đối tượng khớp tương ứng. Trả về

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 nếu không có vị trí nào trong chuỗi khớp với mẫu; Lưu ý rằng điều này khác với việc tìm một trận đấu có độ dài bằng không tại một số điểm trong chuỗi.match object. Return
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 if no position in the string matches the pattern; note that this is different from finding a zero-length match at some point in the string.

________ 337 ________ 405 (mẫu, chuỗi, cờ = 0) ¶(pattern, string, flags=0)

Nếu số không hoặc nhiều ký tự ở đầu chuỗi khớp với mẫu biểu thức chính quy, hãy trả về một đối tượng khớp tương ứng. Trả về

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 nếu chuỗi không khớp với mẫu; Lưu ý rằng điều này khác với một trận đấu có độ dài bằng không.match object. Return
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 if the string does not match the pattern; note that this is different from a zero-length match.

Lưu ý rằng ngay cả trong chế độ

>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
7,
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
08 sẽ chỉ khớp ở đầu chuỗi chứ không phải ở đầu mỗi dòng.

Nếu bạn muốn xác định vị trí đối sánh ở bất cứ đâu trong chuỗi, hãy sử dụng

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 thay thế (xem thêm search () so với match ()).search() vs. match()).

________ 337 ________ 411 (mẫu, chuỗi, cờ = 0) ¶(pattern, string, flags=0)

Nếu toàn bộ chuỗi khớp với mẫu biểu thức chính quy, hãy trả về một đối tượng khớp tương ứng. Trả về

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 nếu chuỗi không khớp với mẫu; Lưu ý rằng điều này khác với một trận đấu có độ dài bằng không.match object. Return
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 if the string does not match the pattern; note that this is different from a zero-length match.

Mới trong phiên bản 3.4.

________ 337 ________ 414 (mẫu, chuỗi, maxsplit = 0, cờ = 0) ¶(pattern, string, maxsplit=0, flags=0)

Chuỗi phân chia theo các lần xuất hiện của mẫu. Nếu chụp dấu ngoặc đơn được sử dụng trong mẫu, thì văn bản của tất cả các nhóm trong mẫu cũng được trả về như một phần của danh sách kết quả. Nếu MAXSplit là không khác biệt, tại hầu hết các phân tách MaxSplit xảy ra và phần còn lại của chuỗi được trả về làm yếu tố cuối cùng của danh sách.

>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']

Nếu có các nhóm bắt giữ trong dấu phân cách và nó khớp với đầu chuỗi, kết quả sẽ bắt đầu bằng một chuỗi trống. Tương tự giữ cho phần cuối của chuỗi:

>>> re.split('(\W+)', '...words, words...')
['', '...', 'words', ', ', 'words', '...', '']

Bằng cách đó, các thành phần phân tách luôn được tìm thấy tại cùng một chỉ số tương đối trong danh sách kết quả.

Ghi chú

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
15 hiện không phân chia một chuỗi trên một khớp mẫu trống. Ví dụ:

(dd300\/\d+\/\d+,)
0

Mặc dù

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
16 cũng phù hợp với 0 ‘X, trước khi‘ A, giữa ‘B, và‘ C, và sau khi ‘C, hiện tại các trận đấu này bị bỏ qua. Hành vi chính xác (nghĩa là tách trên các trận đấu trống và trả lại
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
17) sẽ được thực hiện trong các phiên bản Python trong tương lai, nhưng vì đây là một thay đổi không tương thích ngược, một
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
18 sẽ được nâng lên trong khi đó.

Các mẫu chỉ có thể khớp với các chuỗi trống hiện không bao giờ phân chia chuỗi. Vì điều này không phù hợp với hành vi dự kiến, A

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
19 sẽ được nâng lên bắt đầu từ Python 3.5:

(dd300\/\d+\/\d+,)
1

Đã thay đổi trong phiên bản 3.1: Đã thêm đối số cờ tùy chọn.Added the optional flags argument.

Đã thay đổi trong phiên bản 3.5: Tách trên một mẫu có thể khớp với một chuỗi trống bây giờ làm tăng cảnh báo. Các mẫu chỉ có thể khớp với các chuỗi trống hiện bị từ chối.Splitting on a pattern that could match an empty string now raises a warning. Patterns that can only match empty strings are now rejected.

________ 337 ________ 421 (mẫu, chuỗi, cờ = 0) ¶(pattern, string, flags=0)

Trả về tất cả các trận đấu không chồng chéo của mẫu trong chuỗi, như một danh sách các chuỗi. Chuỗi được quét từ trái sang phải và các trận đấu được trả về theo thứ tự được tìm thấy. Nếu một hoặc nhiều nhóm có mặt trong mẫu, hãy trả lại danh sách các nhóm; Đây sẽ là một danh sách các bộ dữ liệu nếu mẫu có nhiều hơn một nhóm. Các trận đấu trống được bao gồm trong kết quả trừ khi họ chạm vào sự khởi đầu của một trận đấu khác.

________ 337 ________ 423 (mẫu, chuỗi, cờ = 0) ¶(pattern, string, flags=0)

Trả về một iterator mang lại các đối tượng khớp trên tất cả các kết quả không chồng chéo cho mẫu RE trong chuỗi. Chuỗi được quét từ trái sang phải và các trận đấu được trả về theo thứ tự được tìm thấy. Các trận đấu trống được bao gồm trong kết quả trừ khi họ chạm vào sự khởi đầu của một trận đấu khác.iterator yielding match objects over all non-overlapping matches for the RE pattern in string. The string is scanned left-to-right, and matches are returned in the order found. Empty matches are included in the result unless they touch the beginning of another match.

A(pattern, repl, string, count=0, flags=0)

Trả về chuỗi thu được bằng cách thay thế các lần xuất hiện không chồng chéo bên trái của mẫu trong chuỗi bằng cách thay thế. Nếu mẫu được tìm thấy, chuỗi được trả về không thay đổi. REPREP có thể là một chuỗi hoặc một hàm; Nếu đó là một chuỗi, bất kỳ dấu gạch chéo ngược nào thoát trong đó được xử lý. Đó là,

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
26 được chuyển đổi thành một ký tự mới,
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
27 được chuyển đổi thành một trở lại vận chuyển, v.v. Những trốn thoát chưa biết như
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
28 bị bỏ lại một mình. Các bản sao lưu, chẳng hạn như
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
29, được thay thế bằng chuỗi con phù hợp với nhóm 6 trong mẫu. Ví dụ:

(dd300\/\d+\/\d+,)
2

Nếu thay thế là một hàm, nó được gọi cho mọi lần xuất hiện không chồng chéo của mẫu. Hàm có một đối số đối tượng khớp và trả về chuỗi thay thế. Ví dụ:

(dd300\/\d+\/\d+,)
3

Mẫu có thể là một chuỗi hoặc một đối tượng RE.

Số lượng đối số tùy chọn là số lượng tối đa của các lần xuất hiện mẫu được thay thế; Đếm phải là một số nguyên không âm. Nếu bị bỏ qua hoặc không, tất cả các lần xuất hiện sẽ được thay thế. Các trận đấu trống cho mẫu chỉ được thay thế khi không liền kề với trận đấu trước đó, do đó

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
30 trả về
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
31.

Trong các đối số thay thế loại chuỗi, ngoài các ký tự thoát ra và các bản sao lưu được mô tả ở trên,

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
32 sẽ sử dụng chuỗi con phù hợp với nhóm có tên
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
33, theo định nghĩa của cú pháp
(dd300\/\d+\/\d+,)
88.
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
35 sử dụng số nhóm tương ứng; Do đó,
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
36 tương đương với
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
37, nhưng không phải là mơ hồ trong việc thay thế như
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
38.
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
39 sẽ được hiểu là tham chiếu đến nhóm 20, không phải là tham chiếu đến nhóm 2, sau đó là ký tự nghĩa đen
result = re.match(pattern, string)
8. Các bản thay thế lại
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
41 trong toàn bộ chuỗi con phù hợp với RE.

Đã thay đổi trong phiên bản 3.1: Đã thêm đối số cờ tùy chọn.Added the optional flags argument.

Thay đổi trong phiên bản 3.5: Các nhóm chưa từng có được thay thế bằng một chuỗi trống.Unmatched groups are replaced with an empty string.

Đã thay đổi trong phiên bản 3.6: Các ESCAPES chưa biết trong mẫu bao gồm

prog = re.compile(pattern)
result = prog.match(string)
6 và một chữ cái ASCII hiện là lỗi.Unknown escapes in pattern consisting of
prog = re.compile(pattern)
result = prog.match(string)
6 and an ASCII letter now are errors.

Không được dùng từ phiên bản 3.5, sẽ bị xóa trong phiên bản 3.7: Những lần thoát chưa biết trong việc thay thế bao gồm

prog = re.compile(pattern)
result = prog.match(string)
6 và một lá thư ASCII hiện đưa ra cảnh báo không nhận và sẽ bị cấm trong Python 3.7.Unknown escapes in repl consisting of
prog = re.compile(pattern)
result = prog.match(string)
6 and an ASCII letter now raise a deprecation warning and will be forbidden in Python 3.7.

________ 337 ________ 445 (mẫu, repl, chuỗi, đếm = 0, cờ = 0)(pattern, repl, string, count=0, flags=0)

Thực hiện thao tác tương tự như

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
46, nhưng trả về một tuple
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
47.

Đã thay đổi trong phiên bản 3.1: Đã thêm đối số cờ tùy chọn.Added the optional flags argument.

Thay đổi trong phiên bản 3.5: Các nhóm chưa từng có được thay thế bằng một chuỗi trống.Unmatched groups are replaced with an empty string.

________ 337 ________ 449 (mẫu) ¶(pattern)

Thoát khỏi tất cả các ký tự trong mẫu ngoại trừ các chữ cái, số và

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
50 của ASCII. Điều này rất hữu ích nếu bạn muốn khớp với một chuỗi theo nghĩa đen tùy ý có thể có các metacharacters biểu thức thông thường trong đó. Ví dụ:

(dd300\/\d+\/\d+,)
4

Đã thay đổi trong phiên bản 3.3: ký tự

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
50 không còn thoát ra được.The
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
50 character is no longer escaped.

________ 337 ________ 453 ()()

Xóa bộ đệm biểu thức thông thường.

Ngoại lệ ________ 337 ________ 455 (tin nhắn, mẫu = none, pos = none) ¶(msg, pattern=None, pos=None)

Ngoại lệ được nêu ra khi một chuỗi được truyền cho một trong các hàm ở đây không phải là biểu thức chính quy hợp lệ (ví dụ, nó có thể chứa dấu ngoặc đơn chưa từng có) hoặc khi một số lỗi khác xảy ra trong quá trình biên dịch hoặc khớp. Nó không bao giờ là một lỗi nếu một chuỗi không có khớp với một mẫu. Trường hợp lỗi có các thuộc tính bổ sung sau:

________ 456¶

Thông báo lỗi chưa được định dạng.

________ 457¶

Các mẫu biểu thức chính quy.

________ 458¶

Chỉ số trong mẫu trong đó biên dịch không thành công (có thể là

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03).

________ 460¶

Dòng tương ứng với POS (có thể là

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03).

________ 462¶

Cột tương ứng với POS (có thể là

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03).

Đã thay đổi trong phiên bản 3.5: Đã thêm các thuộc tính bổ sung.Added additional attributes.

6.2.3. Đối tượng biểu thức chính quy

Đã biên dịch các đối tượng biểu thức chính quy hỗ trợ các phương thức và thuộc tính sau:

________ 464 ________ 402 (Chuỗi [, pos [, endpos]])(string[, pos[, endpos]])

Quét qua chuỗi Tìm kiếm vị trí đầu tiên nơi biểu thức chính quy này tạo ra một trận đấu và trả về một đối tượng khớp tương ứng. Trả về

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 nếu không có vị trí nào trong chuỗi khớp với mẫu; Lưu ý rằng điều này khác với việc tìm một trận đấu có độ dài bằng không tại một số điểm trong chuỗi.match object. Return
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 if no position in the string matches the pattern; note that this is different from finding a zero-length match at some point in the string.

Tham số thứ hai tùy chọn POS cung cấp một chỉ mục trong chuỗi nơi tìm kiếm sẽ bắt đầu; Nó mặc định là

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
67. Điều này không hoàn toàn tương đương với việc cắt chuỗi; ký tự mẫu
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
6 khớp với đầu thực của chuỗi và tại các vị trí chỉ sau một dòng mới, nhưng không nhất thiết phải ở chỉ mục nơi tìm kiếm sẽ bắt đầu.

Các endpos tham số tùy chọn giới hạn bao xa chuỗi sẽ được tìm kiếm; Nó sẽ như thể chuỗi là các ký tự endpos dài, vì vậy chỉ các ký tự từ POS đến

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
69 mới được tìm kiếm cho một trận đấu. Nếu endpos nhỏ hơn POS, sẽ không tìm thấy trận đấu nào; Mặt khác, nếu RX là một đối tượng biểu thức chính quy được biên dịch,
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
70 tương đương với
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
71.

(dd300\/\d+\/\d+,)
5

________ 464 ________ 405 (Chuỗi [, pos [, endpos]])(string[, pos[, endpos]])

Nếu số không hoặc nhiều ký tự ở đầu chuỗi khớp với biểu thức chính quy này, hãy trả về một đối tượng khớp tương ứng. Trả về

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 nếu chuỗi không khớp với mẫu; Lưu ý rằng điều này khác với một trận đấu có độ dài bằng không.match object. Return
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 if the string does not match the pattern; note that this is different from a zero-length match.

Các tham số POS và EndPOS tùy chọn có cùng ý nghĩa với phương thức

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47.

(dd300\/\d+\/\d+,)
6

Nếu bạn muốn xác định vị trí đối sánh ở bất cứ đâu trong chuỗi, hãy sử dụng

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 thay thế (xem thêm search () so với match ()).search() vs. match()).

________ 464 ________ 411 (Chuỗi [, pos [, endpos]])(string[, pos[, endpos]])

Nếu toàn bộ chuỗi khớp với biểu thức chính quy này, hãy trả về một đối tượng khớp tương ứng. Trả về

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 nếu chuỗi không khớp với mẫu; Lưu ý rằng điều này khác với một trận đấu có độ dài bằng không.match object. Return
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 if the string does not match the pattern; note that this is different from a zero-length match.

Các tham số POS và EndPOS tùy chọn có cùng ý nghĩa với phương thức

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47.

(dd300\/\d+\/\d+,)
7

Nếu bạn muốn xác định vị trí đối sánh ở bất cứ đâu trong chuỗi, hãy sử dụng

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 thay thế (xem thêm search () so với match ()).

________ 464 ________ 411 (Chuỗi [, pos [, endpos]])(string, maxsplit=0)

Nếu toàn bộ chuỗi khớp với biểu thức chính quy này, hãy trả về một đối tượng khớp tương ứng. Trả về

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 nếu chuỗi không khớp với mẫu; Lưu ý rằng điều này khác với một trận đấu có độ dài bằng không.

Mới trong phiên bản 3.4.(string[, pos[, endpos]])

________ 464 ________ 414 (Chuỗi, MaxSplit = 0) ¶

Giống hệt với hàm
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
15, sử dụng mẫu được biên dịch.(string[, pos[, endpos]])

________ 464 ________ 421 (chuỗi [, pos [, endpos]])

Tương tự như hàm
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
86, sử dụng mẫu được biên dịch, nhưng cũng chấp nhận các tham số POS và EndPOS tùy chọn giới hạn vùng tìm kiếm như
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
48.(repl, string, count=0)

________ 464 ________ 423 (Chuỗi [, pos [, endpos]])

________ 464 ________ 445 (repl, chuỗi, đếm = 0) ¶(repl, string, count=0)

Giống hệt với hàm

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
97, sử dụng mẫu được biên dịch.

________ 464 ________ 499¶

Các lá cờ phù hợp với regex. Đây là sự kết hợp của các cờ được cung cấp cho

prog = re.compile(pattern)
result = prog.match(string)
00, bất kỳ cờ nội tuyến
(dd300\/\d+\/\d+,)
84 nào trong mẫu và các cờ ẩn như
prog = re.compile(pattern)
result = prog.match(string)
02 nếu mẫu là chuỗi unicode.

________ 464 ________ 504¶

Số lượng các nhóm chụp trong mẫu.

________ 464 ________ 506¶

Một bản đồ từ điển lập bản đồ bất kỳ tên nhóm tượng trưng nào được xác định bởi

prog = re.compile(pattern)
result = prog.match(string)
07 đến số nhóm. Từ điển trống nếu không có nhóm tượng trưng nào được sử dụng trong mẫu.

________ 464 ________ 457¶

Chuỗi mẫu mà từ đó đối tượng RE được biên dịch.

6.2.4. Khớp đối tượng lor

Các đối tượng khớp luôn có giá trị boolean là

prog = re.compile(pattern)
result = prog.match(string)
10. Vì
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
48 và
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 trả về
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 Khi không có khớp, bạn có thể kiểm tra xem có trận đấu với câu lệnh
prog = re.compile(pattern)
result = prog.match(string)
14 đơn giản không:

(dd300\/\d+\/\d+,)
8

Đối tượng khớp hỗ trợ các phương thức và thuộc tính sau:

________ 515 ________ 516 (Mẫu)(template)

Trả về chuỗi thu được bằng cách thực hiện thay thế Backslash trên mẫu chuỗi mẫu, như được thực hiện bằng phương thức

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
46. Các lối thoát như
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
26 được chuyển đổi thành các ký tự thích hợp và các bản sao lưu số (
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
18,
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
37) và được đặt tên là Backreferences (
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
25,
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
32) được thay thế bằng nội dung của nhóm tương ứng.

Thay đổi trong phiên bản 3.5: Các nhóm chưa từng có được thay thế bằng một chuỗi trống.Unmatched groups are replaced with an empty string.

________ 515 ________ 524 ([Nhóm1, ...])([group1, ...])

Trả về một hoặc nhiều nhóm con của trận đấu. Nếu có một đối số duy nhất, kết quả là một chuỗi duy nhất; Nếu có nhiều đối số, kết quả là một tuple với một mục cho mỗi đối số. Không có đối số, Group1 mặc định về 0 (toàn bộ trận đấu được trả về). Nếu một đối số nhóm bằng không, giá trị trả về tương ứng là toàn bộ chuỗi khớp; Nếu nó nằm trong phạm vi bao gồm [1..99], thì đó là chuỗi phù hợp với nhóm dấu ngoặc đơn tương ứng. Nếu một số nhóm âm hoặc lớn hơn số lượng nhóm được xác định trong mẫu, ngoại lệ

prog = re.compile(pattern)
result = prog.match(string)
25 sẽ được nâng lên. Nếu một nhóm được chứa trong một phần của mẫu không khớp, kết quả tương ứng là
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03. Nếu một nhóm được chứa trong một phần của mẫu phù hợp với nhiều lần, trận đấu cuối cùng sẽ được trả về.

(dd300\/\d+\/\d+,)
9

Nếu biểu thức chính quy sử dụng cú pháp

(dd300\/\d+\/\d+,)
88, các đối số nhóm cũng có thể là các chuỗi xác định các nhóm theo tên nhóm của chúng. Nếu một đối số chuỗi không được sử dụng làm tên nhóm trong mẫu, ngoại lệ
prog = re.compile(pattern)
result = prog.match(string)
25 sẽ được nêu ra.

Một ví dụ phức tạp vừa phải:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
0

Các nhóm được đặt tên cũng có thể được đề cập bởi chỉ mục của họ:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
1

Nếu một nhóm khớp với nhiều lần, chỉ có thể truy cập được trận đấu cuối cùng:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
2

________ 515 ________ 530 (g) ¶(g)

Điều này giống hệt với

prog = re.compile(pattern)
result = prog.match(string)
31. Điều này cho phép truy cập dễ dàng hơn vào một nhóm cá nhân từ một trận đấu:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
3

Mới trong phiên bản 3.6.

________ 515 ________ 504 (mặc định = Không) ¶(default=None)

Trả về một tuple chứa tất cả các nhóm nhỏ của trận đấu, từ 1 trở lên tuy nhiên nhiều nhóm nằm trong mẫu. Đối số mặc định được sử dụng cho các nhóm không tham gia vào trận đấu; Nó mặc định là

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03.

Ví dụ:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
4

Nếu chúng ta thực hiện vị trí thập phân và mọi thứ sau khi nó tùy chọn, không phải tất cả các nhóm có thể tham gia vào trận đấu. Các nhóm này sẽ mặc định là

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 trừ khi đối số mặc định được đưa ra:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
5

________ 515 ________ 537 (mặc định = không) ¶(default=None)

Trả về một từ điển chứa tất cả các nhóm nhỏ được đặt tên của trận đấu, được khóa bởi tên phân nhóm. Đối số mặc định được sử dụng cho các nhóm không tham gia vào trận đấu; Nó mặc định là

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03. Ví dụ:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
6

________ 515 ________ 540 ([Nhóm]) ________ 515 ________ 542 ([Nhóm])([group])
prog = re.compile(pattern)
result = prog.match(string)
15
prog = re.compile(pattern)
result = prog.match(string)
42([group])

Trả về các chỉ số của phần bắt đầu và kết thúc của chuỗi con phù hợp với nhóm; Nhóm mặc định về 0 (có nghĩa là toàn bộ chuỗi con phù hợp). Trả lại

prog = re.compile(pattern)
result = prog.match(string)
43 nếu nhóm tồn tại nhưng không đóng góp cho trận đấu. Đối với một đối tượng khớp m và nhóm G đã đóng góp cho trận đấu, phần phụ phù hợp với nhóm G (tương đương với
prog = re.compile(pattern)
result = prog.match(string)
31) là

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
7

Lưu ý rằng

prog = re.compile(pattern)
result = prog.match(string)
45 sẽ bằng
prog = re.compile(pattern)
result = prog.match(string)
46 nếu nhóm khớp với chuỗi null. Ví dụ, sau
prog = re.compile(pattern)
result = prog.match(string)
47,
prog = re.compile(pattern)
result = prog.match(string)
48 là 1,
prog = re.compile(pattern)
result = prog.match(string)
49 là 2,
prog = re.compile(pattern)
result = prog.match(string)
50 và
prog = re.compile(pattern)
result = prog.match(string)
51 đều là 2 và
prog = re.compile(pattern)
result = prog.match(string)
52 làm tăng ngoại lệ
prog = re.compile(pattern)
result = prog.match(string)
25.

Một ví dụ sẽ loại bỏ Remove_this khỏi địa chỉ email:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
8

________ 515 ________ 555 ([Nhóm])([group])

Đối với một trận đấu M, trả lại 2-Tuple

prog = re.compile(pattern)
result = prog.match(string)
56. Lưu ý rằng nếu nhóm không đóng góp cho trận đấu, đây là
prog = re.compile(pattern)
result = prog.match(string)
57. Nhóm mặc định về 0, toàn bộ trận đấu.

________ 515 ________ 458¶

Giá trị của POS được chuyển đến phương thức

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 hoặc
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
48 của một đối tượng regex. Đây là chỉ mục vào chuỗi mà động cơ RE bắt đầu tìm kiếm một trận đấu.regex object. This is the index into the string at which the RE engine started looking for a match.

________ 515 ________ 563¶

Giá trị của các endpos được chuyển đến phương thức

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 hoặc
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
48 của một đối tượng regex. Đây là chỉ mục vào chuỗi mà động cơ RE sẽ không đi.regex object. This is the index into the string beyond which the RE engine will not go.

________ 515 ________ 567¶

Chỉ số số nguyên của nhóm bắt giữ phù hợp cuối cùng, hoặc

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 nếu không có nhóm nào được khớp. Ví dụ: các biểu thức
prog = re.compile(pattern)
result = prog.match(string)
69,
prog = re.compile(pattern)
result = prog.match(string)
70 và
prog = re.compile(pattern)
result = prog.match(string)
71 sẽ có
prog = re.compile(pattern)
result = prog.match(string)
72 nếu được áp dụng cho chuỗi
prog = re.compile(pattern)
result = prog.match(string)
73, trong khi biểu thức
prog = re.compile(pattern)
result = prog.match(string)
74 sẽ có
prog = re.compile(pattern)
result = prog.match(string)
75, nếu được áp dụng cho cùng một chuỗi.

________ 515 ________ 577¶

Tên của nhóm bắt giữ phù hợp cuối cùng, hoặc

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
03 nếu nhóm không có tên, hoặc nếu không có nhóm nào được khớp.

________ 515 ________ 580¶

Đối tượng biểu thức chính quy có phương pháp

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
48 hoặc
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 đã tạo ra thể hiện đối sánh này.

________ 515 ________ 584¶

Chuỗi được chuyển đến

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
48 hoặc
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47.

6.2.5. Ví dụ biểu hiện chính quy

6.2.5.1. Kiểm tra một cặp

Trong ví dụ này, chúng tôi sẽ sử dụng chức năng trợ giúp sau để hiển thị các đối tượng phù hợp hơn một chút một cách duyên dáng hơn một chút:

>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
9

Giả sử bạn đang viết một chương trình poker trong đó bàn tay của người chơi được thể hiện dưới dạng chuỗi 5 ký tự với mỗi nhân vật đại diện cho một thẻ, một cách Càng Tiên cho 10, và 2 2, thông qua 9 9, đại diện cho thẻ có giá trị đó.

Để xem liệu một chuỗi đã cho là một bàn tay hợp lệ, người ta có thể làm như sau:

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
0

Tay cuối cùng đó,

prog = re.compile(pattern)
result = prog.match(string)
87, chứa một cặp, hoặc hai trong số cùng một thẻ có giá trị. Để phù hợp với biểu thức thông thường, người ta có thể sử dụng các bản sao lưu như vậy:

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
1

Để tìm hiểu thẻ nào mà cặp bao gồm, người ta có thể sử dụng phương thức

prog = re.compile(pattern)
result = prog.match(string)
88 của đối tượng đối sánh theo cách sau:

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
2

6.2.5.2. Mô phỏng scanf ()

Python hiện không có tương đương với

prog = re.compile(pattern)
result = prog.match(string)
89. Các biểu thức thông thường thường mạnh mẽ hơn, mặc dù cũng nhiều hơn so với các chuỗi định dạng
prog = re.compile(pattern)
result = prog.match(string)
89. Bảng dưới đây cung cấp một số ánh xạ tương đương hoặc ít hơn giữa các mã thông báo định dạng
prog = re.compile(pattern)
result = prog.match(string)
89 và các biểu thức thông thường.

Mã thông báo
prog = re.compile(pattern)
result = prog.match(string)
89
Biểu hiện thông thường
prog = re.compile(pattern)
result = prog.match(string)
93
prog = re.compile(pattern)
result = prog.match(string)
94
prog = re.compile(pattern)
result = prog.match(string)
95
prog = re.compile(pattern)
result = prog.match(string)
96
prog = re.compile(pattern)
result = prog.match(string)
97
prog = re.compile(pattern)
result = prog.match(string)
98
prog = re.compile(pattern)
result = prog.match(string)
99,
result = re.match(pattern, string)
00,
result = re.match(pattern, string)
01,
result = re.match(pattern, string)
02
result = re.match(pattern, string)
03
result = re.match(pattern, string)
04
result = re.match(pattern, string)
05
result = re.match(pattern, string)
06
result = re.match(pattern, string)
07
result = re.match(pattern, string)
08
result = re.match(pattern, string)
09
result = re.match(pattern, string)
10
result = re.match(pattern, string)
11
result = re.match(pattern, string)
12,
result = re.match(pattern, string)
13
result = re.match(pattern, string)
14

Để trích xuất tên tệp và số từ một chuỗi như

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
3

bạn sẽ sử dụng định dạng

prog = re.compile(pattern)
result = prog.match(string)
89 như

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
4

Biểu thức chính quy tương đương sẽ là

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
5

6.2.5.3. search () so với match ()

Python cung cấp hai hoạt động nguyên thủy khác nhau dựa trên các biểu thức thông thường:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
08 chỉ kiểm tra một trận đấu chỉ ở đầu chuỗi, trong khi
result = re.match(pattern, string)
17 kiểm tra đối sánh ở bất cứ đâu trong chuỗi (đây là những gì Perl làm theo mặc định).

Ví dụ:

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
6

Các biểu thức thông thường bắt đầu bằng

>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
6 có thể được sử dụng với
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 để hạn chế trận đấu ở đầu chuỗi:

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
7

Tuy nhiên, lưu ý rằng ở chế độ

>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
7
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
48 chỉ khớp ở đầu chuỗi, trong khi sử dụng
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 với biểu thức thông thường bắt đầu với
>>> re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
>>> re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
6 sẽ khớp ở đầu mỗi dòng.

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
8

6.2.5.4. Làm một danh bạ

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
15 chia một chuỗi vào một danh sách được phân định bởi mẫu được truyền. Phương pháp này là vô giá để chuyển đổi dữ liệu văn bản thành các cấu trúc dữ liệu có thể dễ dàng đọc và sửa đổi bởi Python như được trình bày trong ví dụ sau tạo ra một danh bạ.

Đầu tiên, đây là đầu vào. Thông thường nó có thể đến từ một tệp, ở đây chúng tôi đang sử dụng cú pháp chuỗi được trích xuất ba lần:

>>> m = re.search('(?<=-)\w+', 'spam-egg')
>>> m.group(0)
'egg'
9

Các mục được phân tách bằng một hoặc nhiều dòng mới. Bây giờ chúng tôi chuyển đổi chuỗi thành một danh sách với mỗi dòng không có giá trị có mục nhập riêng:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
0

Cuối cùng, chia mỗi mục vào một danh sách với tên, họ, số điện thoại và địa chỉ. Chúng tôi sử dụng tham số

result = re.match(pattern, string)
25 của
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
15 vì địa chỉ có khoảng trắng, mẫu phân tách của chúng tôi, trong đó:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
1

Mẫu

result = re.match(pattern, string)
27 khớp với dấu hai chấm sau tên cuối cùng, do đó nó không xảy ra trong danh sách kết quả. Với
result = re.match(pattern, string)
25 của
result = re.match(pattern, string)
29, chúng tôi có thể tách số nhà khỏi tên đường phố:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
2

6.2.5.5. Nhắn tin MUNGING¶

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
46 Thay thế mọi lần xuất hiện của một mẫu bằng một chuỗi hoặc kết quả của một hàm. Ví dụ này thể hiện bằng cách sử dụng
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
46 với chức năng cho văn bản của Mung Munge, hoặc ngẫu nhiên thứ tự của tất cả các ký tự trong mỗi từ của một câu ngoại trừ các ký tự đầu tiên và cuối cùng:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
3

6.2.5.6. Tìm tất cả các trạng từ

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
86 phù hợp với tất cả các lần xuất hiện của một mẫu, không chỉ mô hình đầu tiên như
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
47 làm. Ví dụ: nếu một người là một nhà văn và muốn tìm tất cả các trạng từ trong một số văn bản, anh ấy hoặc cô ấy có thể sử dụng
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
86 theo cách sau:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
4

6.2.5.7. Tìm tất cả các trạng từ và vị trí của chúng

Nếu người ta muốn nhiều thông tin hơn về tất cả các trận đấu của một mẫu so với văn bản phù hợp,

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
90 rất hữu ích vì nó cung cấp các đối tượng phù hợp thay vì chuỗi. Tiếp tục với ví dụ trước, nếu một người là một nhà văn muốn tìm tất cả các trạng từ và vị trí của họ trong một số văn bản, anh ta hoặc cô ta sẽ sử dụng
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
90 theo cách sau:match objects instead of strings. Continuing with the previous example, if one was a writer who wanted to find all of the adverbs and their positions in some text, he or she would use
\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
90 in the following manner:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
5

6.2.5.8. Ký hiệu chuỗi thô

Ký hiệu chuỗi thô (

result = re.match(pattern, string)
37) giữ các biểu thức thường xuyên lành mạnh. Nếu không có nó, mọi dấu gạch chéo ngược (
prog = re.compile(pattern)
result = prog.match(string)
6) trong một biểu thức thông thường sẽ phải được đặt trước với một biểu thức khác để thoát khỏi nó. Ví dụ: hai dòng mã sau đây có chức năng giống hệt nhau:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
6

Khi một người muốn kết hợp một dấu gạch chéo ngược theo nghĩa đen, nó phải được thoát trong biểu thức thông thường. Với ký hiệu chuỗi thô, điều này có nghĩa là

result = re.match(pattern, string)
39. Không có ký hiệu chuỗi thô, người ta phải sử dụng
result = re.match(pattern, string)
40, tạo các dòng mã sau giống hệt nhau về mặt chức năng:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
7

6.2.5.9. Viết Tokenizer¶

Một tokenizer hoặc máy quét phân tích một chuỗi để phân loại các nhóm ký tự. Đây là bước đầu tiên hữu ích khi viết trình biên dịch hoặc trình thông dịch.

Các danh mục văn bản được chỉ định với các biểu thức thông thường. Kỹ thuật này là kết hợp những người đó thành một biểu thức thông thường chính và lặp lại các trận đấu liên tiếp:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
8

Tokenizer tạo ra đầu ra sau:

\a      \b      \f      \n
\r      \t      \u      \U
\v      \x      \\
9

Slash về phía trước là gì ở Regex?

Nhân vật chém phía trước được sử dụng để biểu thị ranh giới của biểu thức chính quy:?/ this_IS_MY_REGULAR_EXPRESSION/ ký tự dấu gạch chéo ngược (\) là ký tự thoát.Nó có thể được sử dụng để biểu thị một ký tự thoát ra, một chuỗi, nghĩa đen hoặc một trong các bộ các ký tự đặc biệt được hỗ trợ.used to denote the boundaries of the regular expression: ? /this_is_my_regular_expression/ The backslash character ( \ ) is the escaping character. It can be used to denote an escaped character, a string, literal, or one of the set of supported special characters.

Tiền đạo chém có phải là một nhân vật đặc biệt trong Regex không?

Ví dụ trên có một forwardslash phải được bao gồm trong giá trị chụp, nhưng một dấu gạch chéo phía trước là một ký tự đặc biệt của Regex.a forward slash is a regex special character.

Làm thế nào để bạn bật lên về phía trước Slash trong Regex?

Câu trả lời.Bạn cần thoát khỏi dấu gạch chéo về phía trước trong biểu thức thông thường bằng cách thêm một dấu gạch chéo ngược của nó.adding a backslash infornt of it.

Backslash làm gì trong Python Regex?

Như đã nêu trước đó, các biểu thức chính quy sử dụng ký tự dấu gạch chéo ngược ("\") để 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 mâu thuẫn với việc sử dụng cùng một nhân vật của Python cho cùng một mục đích trong các chữ viết.to indicate special forms or to allow special characters to be used without invoking their special meaning. This conflictts with Python's usage of the same character for the same purpose in string literals.