Hướng dẫn how to check if a string is a regular expression in python - cách kiểm tra xem một chuỗi có phải là biểu thức chính quy trong python không

Trong Java, tôi có thể sử dụng chức năng sau để kiểm tra xem một chuỗi là regex hợp lệ (nguồn):

boolean isRegex;
try {
  Pattern.compile(input);
  isRegex = true;
} catch (PatternSyntaxException e) {
  isRegex = false;
}

Có một con trăn tương đương với Pattern.compile()PatternSyntaxException? Nếu vậy, nó là cái gì?

Hướng dẫn how to check if a string is a regular expression in python - cách kiểm tra xem một chuỗi có phải là biểu thức chính quy trong python không

mkrieger1

16.1k4 Huy hiệu vàng50 Huy hiệu bạc58 Huy hiệu đồng4 gold badges50 silver badges58 bronze badges

Hỏi ngày 28 tháng 10 năm 2013 lúc 9:21Oct 28, 2013 at 9:21

7

Tương tự như Java. Sử dụng ngoại lệ re.error:

import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False

Ngoại lệ re.error

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ả lời ngày 28 tháng 10 năm 2013 lúc 9:24Oct 28, 2013 at 9:24

Falsetrufalsetrufalsetru

346K60 Huy hiệu vàng691 Huy hiệu bạc614 Huy hiệu đồng60 gold badges691 silver badges614 bronze badges

6

Một cách lạ mắt khác để viết cùng một câu trả lời:

import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')

Đã trả lời ngày 17 tháng 9 năm 2020 lúc 14:46Sep 17, 2020 at 14:46

Hướng dẫn how to check if a string is a regular expression in python - cách kiểm tra xem một chuỗi có phải là biểu thức chính quy trong python không

Amit Guptaamit GuptaAmit Gupta

2.5524 Huy hiệu vàng24 Huy hiệu bạc37 Huy hiệu đồng4 gold badges24 silver badges37 bronze badges

Một regex (biểu thức chính quy) là một chuỗi các ký tự được sử dụng để xác định một mẫu. Mẫu này có thể được sử dụng để tìm kiếm, thay thế và các hoạt động khác. Regex được sử dụng rộng rãi trong các ứng dụng yêu cầu xác thực đầu vào, xác thực mật khẩu, nhận dạng mẫu, tìm kiếm và thay thế các tiện ích (được tìm thấy trong bộ xử lý văn bản), v.v. Điều này là do thực tế là cú pháp Regex vẫn giữ nguyên các ngôn ngữ và triển khai lập trình khác nhau. Do đó, một người có nắm bắt nó cung cấp tuổi thọ trên các ngôn ngữ. Trong bài viết này, chúng tôi sẽ tạo một chương trình để kiểm tra tính hợp lệ của chuỗi regex. & Nbsp;Regex (Regular Expression) is a sequence of characters used for defining a pattern. This pattern could be used for searching, replacing and other operations. Regex is extensively utilized in applications that require input validation, Password validation, Pattern Recognition, search and replace utilities (found in word processors) etc. This is due to the fact that regex syntax stays the same across different programming languages and implementations. Therefore, one having the grasp of it provides longevity across languages. In this article, we will be creating a program for checking the validity of a regex string. 

Phương pháp chúng tôi sẽ sử dụng sẽ đòi hỏi một sự hiểu biết vững chắc về cấu trúc thử nghiệm của Python. Do đó, sẽ là khôn ngoan nếu chúng ta chạm vào điều đó trước khi chuyển sang mã thực tế. & NBSP;

Xử lý ngoại lệ & NBSP;

Thử ngoại trừ Khối được sử dụng để bắt và xử lý các ngoại lệ gặp phải trong quá trình thực hiện một khối mã cụ thể (xây dựng tồn tại trong các ngôn ngữ lập trình khác dưới tên Try-Catch). Cú pháp chung của khối Except Try-Except như sau:

try:

& nbsp; & nbsp;# thực thi mã này

& nbsp; & nbsp ;.

& nbsp; & nbsp ;.

ngoại trừ [ngoại lệ]:[Exception]:

& nbsp; & nbsp;# thực thi mã này, nếu một ngoại lệ phát sinh trong quá trình thực hiện khối thử

& nbsp; & nbsp ;.

& nbsp; & nbsp ;.

ngoại trừ [ngoại lệ]:

Code:

& nbsp; & nbsp;# thực thi mã này, nếu một ngoại lệ phát sinh trong quá trình thực hiện khối thử

Python3

Trong cú pháp trên, bất kỳ mã nào được tìm thấy trong khối thử sẽ được thực thi. Nếu một ngoại lệ/lỗi phát sinh trong quá trình thực hiện khối thử thì (chỉ) khối ngoại trừ được thực thi. Nếu khối thử thực thi mà không tạo ra một ngoại lệ, thì khối ngoại trừ won won sẽ được thực thi. Nếu một mệnh đề ngoại trừ được sử dụng, thì nó sẽ bắt được bất kỳ ngoại lệ nào (và thậm chí một số hệ thống_exits) gặp phải trong quá trình thực hiện Block thử. Để ngăn chặn như vậy xảy ra, nói chung, đó là một thực tế tốt để chỉ định một ngoại lệ sau ngoại trừ. Điều này đảm bảo rằng chỉ sau khi gặp ngoại lệ/lỗi cụ thể đó, khối ngoại trừ sẽ thực thi. Điều này ngăn chặn sự che giấu của các lỗi khác gặp phải trong quá trình thực hiện khối thử. Ngoài ra, nhiều điều trừ các mệnh đề có thể được sử dụng trong cùng một khối Except, điều này cho phép nó bẫy rất nhiều ngoại lệ và đối phó với chúng một cách cụ thể. Cấu trúc này chứa các từ khóa khác cũng như cuối cùng, khác, v.v. mà aren yêu cầu trong bối cảnh hiện tại. Do đó, chỉ có các phần liên quan được mô tả.

Trong mã sau, chúng tôi sẽ chỉ định RE.Error là ngoại lệ trong mệnh đề ngoại trừ của khối Ext-Except. Lỗi này gặp phải khi tìm thấy mẫu Regex không hợp lệ, trong quá trình biên dịch mẫu.

import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
7
import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
8

import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
9
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
0
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
1
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
2

import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
1
import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
2

import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
9
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
6
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
7
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
8
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
9

import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
9
Non valid regex pattern
1

import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
3
import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
4
import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
5
import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
6

Non valid regex pattern

Explanation:

import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
3
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
4

Note:

Mã trên chỉ liên quan đến ngoại lệ Re.Error. Nhưng các trường hợp ngoại lệ khác liên quan đến regex cũng tồn tại như Recursionerror, cần được xử lý cụ thể (bằng cách thêm một mệnh đề riêng biệt ngoại trừ cho ngoại lệ đó hoặc thay đổi độ sâu ngăn xếp tối đa bằng cách sử dụng sys.setrecursionlimit () như của trường hợp này). ;

Kiểm tra xem chuỗi đầu vào có khớp với mẫu regex không

Trong ví dụ sau, chúng tôi sẽ kiểm tra xem một chuỗi đầu vào có khớp với mẫu regex nhất định hay không. Đây là giả sử mẫu regex là một mô hình hợp lệ (có thể được đảm bảo bằng cách sử dụng ví dụ đã nói ở trên). Chúng tôi sẽ kiểm tra xem chuỗi đầu vào có phải là chuỗi chữ và số không (một có chứa bảng chữ cái hoặc chữ số trong suốt độ dài của nó) hay không. Chúng tôi sẽ sử dụng lớp sau để kiểm tra chuỗi:

^[A-Za-z0-9]+$

Mặc dù tồn tại một chuỗi đặc biệt trong Regex (\ W) để tìm các ký tự chữ và số. Nhưng chúng tôi đã thắng được khi sử dụng nó vì nó chứa dấu gạch dưới (_) trong lớp ký tự của nó (A-ZA-Z0-9_), được coi là một ký tự chữ và số trong hầu hết các tiêu chuẩn.\w)for finding alphanumeric characters. But we won’t be using it as it contains the underscore ( _ ) in its character class (A-Za-z0-9_), which isn’t considered as an alphanumeric character under most standards.

Code:

Python3

import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
1
import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
2

Non valid regex pattern
4
import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
4
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
0
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
1
Non valid regex pattern
8
Non valid regex pattern
9
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
9

^[A-Za-z0-9]+$
1
import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
4
^[A-Za-z0-9]+$
3
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
7
^[A-Za-z0-9]+$
5
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
9

^[A-Za-z0-9]+$
7
^[A-Za-z0-9]+$
8

import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
9
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
6
> Enter the string: DeepLearnedSupaSampling01
  'DeepLearnedSupaSampling01' is an alphanumeric string!
1
> Enter the string: DeepLearnedSupaSampling01
  'DeepLearnedSupaSampling01' is an alphanumeric string!
2
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
9

> Enter the string: DeepLearnedSupaSampling01
  'DeepLearnedSupaSampling01' is an alphanumeric string!
4
import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
8

import re

try:
    re.compile('[')
    is_valid = True
except re.error:
    is_valid = False
9
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
6
> Enter the string: DeepLearnedSupaSampling01
  'DeepLearnedSupaSampling01' is an alphanumeric string!
1
> Enter the string: DeepLearnedSupaSampling01
  'DeepLearnedSupaSampling01' is an alphanumeric string!
9
import re
try:
    print(bool(re.compile(input())))
except re.error:
    print('False')
9

Output:

> Enter the string: DeepLearnedSupaSampling01
  'DeepLearnedSupaSampling01' is an alphanumeric string!
> Enter the string: afore 89df
  'afore 89df' is NOT a alphanumeric string!

Explanation:

Đầu tiên, chúng tôi đã biên dịch mẫu regex bằng re.compile (). Mẫu regex chứa một bộ ký tự được sử dụng để chỉ định rằng tất cả các bảng chữ cái (chữ thường và chữ hoa) và các chữ số (0-9) sẽ được đưa vào mẫu. Theo lớp là dấu cộng ( +) là vòng loại lặp lại. Điều này cho phép tìm kiếm biểu thức chính quy kết quả phù hợp với 1 hoặc nhiều sự lặp lại của biểu thức chính quy trước (đối với chúng tôi, đó là bộ ký tự chữ và số). Sau đó, chúng tôi nhắc người dùng cho chuỗi đầu vào. Sau đó, chúng tôi đã chuyển chuỗi đầu vào và biên dịch mẫu regex để re.fullmatch (). Phương pháp này kiểm tra xem toàn bộ chuỗi có khớp với mẫu biểu thức chính quy hay không. Nếu nó hoạt động thì nó sẽ trả về 1, nếu không thì một 0. mà chúng ta đã sử dụng bên trong cấu trúc IF-Else để hiển thị thông báo thành công/thất bại cho phù hợp.


Là một chuỗi một biểu thức chính quy?

Định nghĩa.Trong lý thuyết ngôn ngữ chính thức, một biểu thức chính quy (a.k.a. Regex, Regexp hoặc R.E.), là một chuỗi đại diện cho ngôn ngữ (loại 3) thông thường.Huh??Được rồi, trong nhiều ngôn ngữ lập trình, một biểu thức chính quy là một mẫu phù hợp với các chuỗi hoặc các đoạn.a regular expression (a.k.a. regex, regexp, or r.e.), is a string that represents a regular (type-3) language. Huh?? Okay, in many programming languages, a regular expression is a pattern that matches strings or pieces of strings.

Regex hay không Python có phải là Python không?

Một biểu thức regex, hoặc biểu thức chính quy, là một chuỗi các ký tự tạo thành một mẫu tìm kiếm.Regex có thể được sử dụng để kiểm tra xem một chuỗi có chứa mẫu tìm kiếm được chỉ định không.. RegEx can be used to check if a string contains the specified search pattern.