Kiểm tra xem biểu thức chính quy trong chuỗi Python

Nếu bạn là người mới lập trình hoặc đến từ một ngôn ngữ lập trình không phải Python, bạn có thể đang tìm kiếm cách tốt nhất để kiểm tra xem một chuỗi có chứa một chuỗi khác hay không trong Python

Việc xác định các chuỗi con như vậy sẽ hữu ích khi bạn đang làm việc với nội dung văn bản từ một tệp hoặc sau khi bạn nhận được đầu vào của người dùng. Bạn có thể muốn thực hiện các hành động khác nhau trong chương trình của mình tùy thuộc vào việc có chuỗi con hay không

Trong hướng dẫn này, bạn sẽ tập trung vào cách Pythonic nhất để giải quyết tác vụ này, sử dụng toán tử thành viên

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
1. Ngoài ra, bạn sẽ tìm hiểu cách xác định các phương thức chuỗi phù hợp cho các trường hợp sử dụng có liên quan nhưng khác nhau

Cuối cùng, bạn cũng sẽ học cách tìm chuỗi con trong cột gấu trúc. Điều này hữu ích nếu bạn cần tìm kiếm dữ liệu từ tệp CSV. Bạn có thể sử dụng phương pháp mà bạn sẽ học trong phần tiếp theo, nhưng nếu bạn đang làm việc với dữ liệu dạng bảng, thì tốt nhất là tải dữ liệu vào DataFrame của gấu trúc và

Tải xuống miễn phí. Nhấp vào đây để tải xuống mã mẫu mà bạn sẽ sử dụng để kiểm tra xem một chuỗi có chứa chuỗi con không

Cách xác nhận rằng một chuỗi Python chứa một chuỗi khác

Nếu bạn cần kiểm tra xem một chuỗi có chứa chuỗi con hay không, hãy sử dụng toán tử thành viên của Python

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
1. Trong Python, đây là cách được đề xuất để xác nhận sự tồn tại của chuỗi con trong chuỗi

>>>

>>> raw_file_content = """Hi there and welcome.
.. This is a special hidden file with a SECRET secret.
.. I don't want to tell you The Secret,
.. but I do want to secretly tell you that I have one."""

>>> "secret" in raw_file_content
True

Toán tử thành viên

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
1 cung cấp cho bạn một cách nhanh chóng và dễ đọc để kiểm tra xem một chuỗi con có tồn tại trong một chuỗi hay không. Bạn có thể nhận thấy rằng dòng mã gần giống như tiếng Anh

Ghi chú. Nếu bạn muốn kiểm tra xem chuỗi con không có trong chuỗi hay không, thì bạn có thể sử dụng

>>>

>>> "secret" not in raw_file_content
False

Bởi vì chuỗi con

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
5 có mặt trong
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
6, nên toán tử
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
4 trả về
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
8

Khi bạn sử dụng

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
1, biểu thức sẽ trả về giá trị Boolean

  • >>> "" in "secret"
    True
    
    0 nếu Python tìm thấy chuỗi con
  • >>> if "secret" in raw_file_content:
    ..    print("Found!")
    ...
    Found!
    
    8 nếu Python không tìm thấy chuỗi con

Bạn có thể sử dụng cú pháp trực quan này trong các câu lệnh có điều kiện để đưa ra quyết định trong mã của mình

>>>

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!

Trong đoạn mã này, bạn sử dụng toán tử thành viên để kiểm tra xem

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
5 có phải là chuỗi con của
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
6 không. Nếu đúng như vậy, thì bạn sẽ in một tin nhắn đến thiết bị đầu cuối. Mọi mã thụt lề sẽ chỉ thực thi nếu chuỗi Python mà bạn đang kiểm tra chứa chuỗi con mà bạn cung cấp

Ghi chú. Python xem xét bất kỳ chuỗi nào khác, vì vậy việc kiểm tra chuỗi trống trong chuỗi trả về

>>> "" in "secret"
True
0

>>>

>>> "" in "secret"
True

Điều này có thể gây ngạc nhiên vì Python xem xét , nhưng đó là một trường hợp cạnh hữu ích cần ghi nhớ

Toán tử thành viên

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
1 là người bạn tốt nhất của bạn nếu bạn chỉ cần kiểm tra xem chuỗi Python có chứa chuỗi con hay không

Tuy nhiên, nếu bạn muốn biết thêm về chuỗi con thì sao?

Python đã tìm thấy sự cố nào trong số này?

Loại bỏ các quảng cáo

Tổng quát hóa séc của bạn bằng cách loại bỏ phân biệt chữ hoa chữ thường

Chuỗi Python phân biệt chữ hoa chữ thường. Nếu chuỗi con mà bạn cung cấp sử dụng cách viết hoa khác với cùng một từ trong văn bản của bạn, thì Python sẽ không tìm thấy chuỗi đó. Ví dụ: nếu bạn kiểm tra từ viết thường

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
5 trên a của văn bản gốc, kiểm tra toán tử thành viên sẽ trả về
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
8

>>>

>>> title_cased_file_content = """Hi There And Welcome.
.. This Is A Special Hidden File With A Secret Secret.
.. I Don't Want To Tell You The Secret,
.. But I Do Want To Secretly Tell You That I Have One."""

>>> "secret" in title_cased_file_content
False

Mặc dù thực tế là từ bí mật xuất hiện nhiều lần trong văn bản viết hoa tiêu đề

>>> "" in "secret"
True
9, nhưng nó không bao giờ xuất hiện ở tất cả các chữ thường. Đó là lý do tại sao kiểm tra mà bạn thực hiện với nhà điều hành thành viên trả về
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
8. Python không thể tìm thấy chuỗi toàn chữ thường
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
5 trong văn bản được cung cấp

Con người có cách tiếp cận ngôn ngữ khác với máy tính. Đây là lý do tại sao bạn thường muốn bỏ qua cách viết hoa khi kiểm tra xem một chuỗi có chứa chuỗi con hay không trong Python

Bạn có thể khái quát hóa việc kiểm tra chuỗi con của mình bằng cách chuyển đổi toàn bộ văn bản đầu vào thành chữ thường

>>>

>>> file_content = title_cased_file_content.lower()

>>> print(file_content)
hi there and welcome.
this is a special hidden file with a secret secret.
i don't want to tell you the secret,
but i do want to secretly tell you that i have one.

>>> "secret" in file_content
True

Chuyển đổi văn bản đầu vào của bạn thành chữ thường là một cách phổ biến để giải thích cho thực tế là con người nghĩ về các từ chỉ khác nhau về cách viết hoa là cùng một từ, trong khi máy tính thì không

Ghi chú. Đối với các ví dụ sau, bạn sẽ tiếp tục làm việc với

>>> title_cased_file_content = """Hi There And Welcome.
.. This Is A Special Hidden File With A Secret Secret.
.. I Don't Want To Tell You The Secret,
.. But I Do Want To Secretly Tell You That I Have One."""

>>> "secret" in title_cased_file_content
False
2, phiên bản chữ thường của văn bản của bạn

Nếu bạn làm việc với chuỗi gốc (

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
6) hoặc chuỗi trong tiêu đề (
>>> "" in "secret"
True
9), thì bạn sẽ nhận được kết quả khác vì chúng không ở dạng chữ thường. Vui lòng thử điều đó trong khi bạn làm việc với các ví dụ

Bây giờ bạn đã chuyển đổi chuỗi thành chữ thường để tránh các sự cố ngoài ý muốn xuất phát từ phân biệt chữ hoa chữ thường, đã đến lúc đào sâu hơn và tìm hiểu thêm về chuỗi con

Tìm hiểu thêm về chuỗi con

Toán tử thành viên

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
1 là một cách tuyệt vời để kiểm tra một cách mô tả xem có một chuỗi con trong một chuỗi hay không, nhưng nó không cung cấp cho bạn bất kỳ thông tin nào khác hơn thế. Nó hoàn hảo cho việc kiểm tra có điều kiện—nhưng nếu bạn cần biết thêm về các chuỗi con thì sao?

Python cung cấp nhiều phương thức chuỗi bổ sung cho phép bạn kiểm tra xem chuỗi đó chứa bao nhiêu chuỗi con đích, để tìm kiếm các chuỗi con theo các điều kiện phức tạp hoặc để xác định vị trí chỉ mục của chuỗi con trong văn bản của bạn

Trong phần này, bạn sẽ đề cập đến một số phương thức chuỗi bổ sung có thể giúp bạn tìm hiểu thêm về chuỗi con

Ghi chú. Bạn có thể đã thấy các phương pháp sau được sử dụng để kiểm tra xem một chuỗi có chứa chuỗi con hay không. Điều này là có thể — nhưng chúng không được sử dụng cho mục đích đó

Lập trình là một hoạt động sáng tạo và bạn luôn có thể tìm ra những cách khác nhau để hoàn thành cùng một nhiệm vụ. Tuy nhiên, để mã của bạn dễ đọc, tốt nhất bạn nên sử dụng các phương thức như chúng dự định trong ngôn ngữ mà bạn đang làm việc

Bằng cách sử dụng

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
1, bạn đã xác nhận rằng chuỗi chứa chuỗi con. Nhưng bạn không nhận được bất kỳ thông tin nào về vị trí của chuỗi con

Nếu bạn cần biết chuỗi con xuất hiện ở đâu trong chuỗi của mình, thì bạn có thể sử dụng

>>> title_cased_file_content = """Hi There And Welcome.
.. This Is A Special Hidden File With A Secret Secret.
.. I Don't Want To Tell You The Secret,
.. But I Do Want To Secretly Tell You That I Have One."""

>>> "secret" in title_cased_file_content
False
7 trên đối tượng chuỗi

>>>

>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59

Khi bạn gọi

>>> title_cased_file_content = """Hi There And Welcome.
.. This Is A Special Hidden File With A Secret Secret.
.. I Don't Want To Tell You The Secret,
.. But I Do Want To Secretly Tell You That I Have One."""

>>> "secret" in title_cased_file_content
False
7 trên chuỗi và chuyển chuỗi con đó làm đối số, bạn sẽ nhận được vị trí chỉ mục của ký tự đầu tiên trong lần xuất hiện đầu tiên của chuỗi con

Ghi chú. Nếu Python không thể tìm thấy chuỗi con, thì

>>> title_cased_file_content = """Hi There And Welcome.
.. This Is A Special Hidden File With A Secret Secret.
.. I Don't Want To Tell You The Secret,
.. But I Do Want To Secretly Tell You That I Have One."""

>>> "secret" in title_cased_file_content
False
7 sẽ đưa ra một ngoại lệ
>>> file_content = title_cased_file_content.lower()

>>> print(file_content)
hi there and welcome.
this is a special hidden file with a secret secret.
i don't want to tell you the secret,
but i do want to secretly tell you that i have one.

>>> "secret" in file_content
True
0

Nhưng nếu bạn muốn tìm các lần xuất hiện khác của chuỗi con thì sao? . Do đó, bằng cách chuyển các vị trí chỉ mục cụ thể, bạn có thể bỏ qua các lần xuất hiện của chuỗi con mà bạn đã xác định

>>>

>>> file_content.index("secret", 60)
66

Khi bạn chuyển một chỉ mục bắt đầu vượt qua lần xuất hiện đầu tiên của chuỗi con, thì Python sẽ tìm kiếm bắt đầu từ đó. Trong trường hợp này, bạn nhận được một trận đấu khác và không phải là

>>> file_content = title_cased_file_content.lower()

>>> print(file_content)
hi there and welcome.
this is a special hidden file with a secret secret.
i don't want to tell you the secret,
but i do want to secretly tell you that i have one.

>>> "secret" in file_content
True
0

Điều đó có nghĩa là văn bản chứa chuỗi con nhiều hơn một lần. Nhưng nó có thường xuyên ở trong đó không?

Bạn có thể sử dụng

>>> file_content = title_cased_file_content.lower()

>>> print(file_content)
hi there and welcome.
this is a special hidden file with a secret secret.
i don't want to tell you the secret,
but i do want to secretly tell you that i have one.

>>> "secret" in file_content
True
3 để nhanh chóng nhận được câu trả lời của mình bằng cách sử dụng mã Python mô tả và thành ngữ

>>>

>>> file_content.count("secret")
4

Bạn đã sử dụng

>>> file_content = title_cased_file_content.lower()

>>> print(file_content)
hi there and welcome.
this is a special hidden file with a secret secret.
i don't want to tell you the secret,
but i do want to secretly tell you that i have one.

>>> "secret" in file_content
True
3 trên chuỗi chữ thường và chuyển chuỗi con
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
5 làm đối số. Python đếm tần suất chuỗi con xuất hiện trong chuỗi và trả về câu trả lời. Văn bản chứa chuỗi con bốn lần. Nhưng những chuỗi con này trông như thế nào?

Bạn có thể kiểm tra tất cả các chuỗi con bằng cách tách văn bản của bạn ở các đường viền từ mặc định và in các từ vào thiết bị đầu cuối của bạn bằng cách sử dụng vòng lặp

>>> file_content = title_cased_file_content.lower()

>>> print(file_content)
hi there and welcome.
this is a special hidden file with a secret secret.
i don't want to tell you the secret,
but i do want to secretly tell you that i have one.

>>> "secret" in file_content
True
6

>>>

>>> for word in file_content.split():
..    if "secret" in word:
..        print(word)
...
secret
secret.
secret,
secretly

Trong ví dụ này, bạn sử dụng

>>> file_content = title_cased_file_content.lower()

>>> print(file_content)
hi there and welcome.
this is a special hidden file with a secret secret.
i don't want to tell you the secret,
but i do want to secretly tell you that i have one.

>>> "secret" in file_content
True
7 để tách văn bản ở các khoảng trắng thành các chuỗi, mà Python gói thành một danh sách. Sau đó, bạn lặp lại danh sách này và sử dụng
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
1 trên mỗi chuỗi này để xem liệu nó có chứa chuỗi con
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
5 hay không

Ghi chú. Thay vì in các chuỗi con, bạn cũng có thể lưu chúng vào một danh sách mới, chẳng hạn bằng cách sử dụng cách hiểu danh sách với biểu thức điều kiện

>>>

>>> "secret" not in raw_file_content
False
0

Trong trường hợp này, bạn xây dựng một danh sách chỉ từ những từ có chứa chuỗi con, về cơ bản là lọc văn bản

Bây giờ bạn có thể kiểm tra tất cả các chuỗi con mà Python xác định, bạn có thể nhận thấy rằng Python không quan tâm liệu có bất kỳ ký tự nào sau chuỗi con

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
5 hay không. Nó tìm thấy từ cho dù nó được theo sau bởi khoảng trắng hay dấu chấm câu. Nó thậm chí còn tìm thấy những từ như
>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
1

Bạn nên biết điều đó, nhưng bạn có thể làm gì nếu muốn đặt các điều kiện chặt chẽ hơn cho việc kiểm tra chuỗi con của mình?

Loại bỏ các quảng cáo

Tìm chuỗi con có điều kiện bằng Regex

Bạn có thể chỉ muốn so khớp các lần xuất hiện của chuỗi con theo sau dấu chấm câu hoặc xác định các từ chứa chuỗi con cộng với các chữ cái khác, chẳng hạn như

>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
1

Đối với những trường hợp như vậy yêu cầu khớp chuỗi liên quan nhiều hơn, bạn có thể sử dụng biểu thức chính quy hoặc biểu thức chính quy, với mô-đun

>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
3 của Python

Ví dụ: nếu bạn muốn tìm tất cả các từ bắt đầu bằng

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
5 nhưng sau đó được theo sau bởi ít nhất một chữ cái bổ sung, thì bạn có thể sử dụng biểu thức chính quy (
>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
5) theo sau là (
>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
6)

>>>

>>> "secret" not in raw_file_content
False
1

Hàm

>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
7 trả về cả chuỗi con khớp với điều kiện cũng như vị trí chỉ mục bắt đầu và kết thúc của nó—chứ không chỉ là
>>> "" in "secret"
True
0

Sau đó, bạn có thể truy cập các thuộc tính này thông qua , được ký hiệu là

>>> file_content.index("secret", 60)
66
0

>>>

>>> "secret" not in raw_file_content
False
2

Những kết quả này mang lại cho bạn rất nhiều sự linh hoạt để tiếp tục làm việc với chuỗi con phù hợp

Ví dụ: bạn chỉ có thể tìm kiếm các chuỗi con được theo sau bởi dấu phẩy (

>>> file_content.index("secret", 60)
66
1) hoặc dấu chấm (_______37_______2)

>>>

>>> "secret" not in raw_file_content
False
3

Có hai kết quả khớp tiềm năng trong văn bản của bạn, nhưng bạn chỉ khớp kết quả đầu tiên phù hợp với truy vấn của mình. Khi bạn sử dụng

>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
7, Python lại chỉ tìm thấy kết quả khớp đầu tiên. Điều gì sẽ xảy ra nếu bạn muốn tất cả các đề cập của
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
5 phù hợp với một điều kiện nhất định?

Để tìm tất cả các kết quả phù hợp bằng cách sử dụng

>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
3, bạn có thể làm việc với
>>> file_content.index("secret", 60)
66
6

>>>

>>> "secret" not in raw_file_content
False
4

Bằng cách sử dụng

>>> file_content.index("secret", 60)
66
6, bạn có thể tìm thấy tất cả các kết quả phù hợp của mẫu trong văn bản của mình. Python lưu tất cả các kết quả khớp dưới dạng chuỗi trong danh sách cho bạn

Khi bạn sử dụng a , bạn có thể chỉ định phần nào của kết quả khớp mà bạn muốn giữ lại trong danh sách của mình bằng cách đặt phần đó trong ngoặc đơn

>>>

>>> "secret" not in raw_file_content
False
5

Bằng cách đặt bí mật trong dấu ngoặc đơn, bạn đã xác định một nhóm chụp duy nhất. Trả về một danh sách các chuỗi khớp với nhóm chụp đó, miễn là có chính xác một nhóm chụp trong mẫu. Bằng cách thêm dấu ngoặc đơn xung quanh bí mật, bạn đã loại bỏ được dấu chấm câu

Ghi chú. Hãy nhớ rằng có bốn lần xuất hiện của chuỗi con

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
5 trong văn bản của bạn và bằng cách sử dụng
>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
3, bạn đã lọc ra hai lần xuất hiện cụ thể mà bạn khớp theo các điều kiện đặc biệt

Sử dụng

>>> file_content.index("secret", 60)
66
6 với các nhóm đối sánh là một cách hiệu quả để trích xuất các chuỗi con từ văn bản của bạn. Nhưng bạn chỉ nhận được một danh sách các chuỗi, điều đó có nghĩa là bạn đã mất các vị trí chỉ mục mà bạn có quyền truy cập khi bạn đang sử dụng
>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
7

Nếu bạn muốn giữ thông tin đó xung quanh, thì

>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
3 có thể cung cấp cho bạn tất cả các kết quả phù hợp trong một trình vòng lặp

>>>

>>> "secret" not in raw_file_content
False
6

Khi bạn sử dụng

>>> file_content.count("secret")
4
4 và chuyển cho nó mẫu tìm kiếm và nội dung văn bản của bạn làm đối số, bạn có thể truy cập từng đối tượng
>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
9 có chứa chuỗi con, cũng như vị trí chỉ mục bắt đầu và kết thúc của nó

Bạn có thể nhận thấy rằng dấu chấm câu xuất hiện trong các kết quả này mặc dù bạn vẫn đang sử dụng nhóm chụp. Đó là bởi vì biểu diễn chuỗi của a hiển thị toàn bộ trận đấu thay vì chỉ nhóm chụp đầu tiên

Nhưng đối tượng

>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
9 là một thùng chứa thông tin mạnh mẽ và, giống như bạn đã thấy trước đó, bạn chỉ có thể chọn ra thông tin mà bạn cần

>>>

>>> "secret" not in raw_file_content
False
7

Bằng cách gọi và chỉ định rằng bạn muốn nhóm chụp đầu tiên, bạn đã chọn từ bí mật không có dấu chấm câu từ mỗi chuỗi con phù hợp

Bạn có thể đi sâu vào chi tiết hơn với khớp chuỗi con khi bạn sử dụng biểu thức chính quy. Thay vì chỉ kiểm tra xem một chuỗi có chứa một chuỗi khác hay không, bạn có thể tìm kiếm các chuỗi con theo các điều kiện phức tạp

Ghi chú. Nếu bạn muốn tìm hiểu thêm về cách sử dụng các nhóm bắt giữ và soạn các mẫu biểu thức chính quy phức tạp hơn, thì bạn có thể tìm hiểu sâu hơn về các biểu thức chính quy trong Python

Sử dụng biểu thức chính quy với

>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
3 là một cách tiếp cận tốt nếu bạn cần thông tin về các chuỗi con hoặc nếu bạn cần tiếp tục làm việc với chúng sau khi tìm thấy chúng trong văn bản. Nhưng nếu bạn đang làm việc với dữ liệu dạng bảng thì sao?

Loại bỏ các quảng cáo

Tìm một chuỗi con trong cột DataFrame của gấu trúc

Nếu bạn làm việc với dữ liệu không đến từ tệp văn bản thuần túy hoặc từ đầu vào của người dùng, mà từ tệp CSV hoặc trang tính Excel, thì bạn có thể sử dụng phương pháp tương tự như đã thảo luận ở trên

Tuy nhiên, có một cách tốt hơn để xác định ô nào trong cột chứa chuỗi con. bạn sẽ sử dụng gấu trúc. Trong ví dụ này, bạn sẽ làm việc với tệp CSV chứa tên công ty và khẩu hiệu giả mạo. Bạn có thể download file bên dưới nếu muốn làm việc cùng

Tải xuống miễn phí. Nhấp vào đây để tải xuống mã mẫu mà bạn sẽ sử dụng để kiểm tra xem một chuỗi có chứa chuỗi con không

Khi bạn đang làm việc với dữ liệu dạng bảng trong Python, tốt nhất bạn nên tải dữ liệu đó vào pandas

>>> for word in file_content.split():
..    if "secret" in word:
..        print(word)
...
secret
secret.
secret,
secretly
0 trước

>>>

>>> "secret" not in raw_file_content
False
8

Trong khối mã này, bạn đã tải tệp CSV chứa một nghìn hàng dữ liệu công ty giả mạo vào DataFrame của gấu trúc và kiểm tra năm hàng đầu tiên bằng cách sử dụng

>>> for word in file_content.split():
..    if "secret" in word:
..        print(word)
...
secret
secret.
secret,
secretly
1

Ghi chú. Bạn sẽ cần tạo một môi trường ảo và để làm việc với thư viện

Sau khi bạn đã tải dữ liệu vào DataFrame, bạn có thể nhanh chóng truy vấn toàn bộ cột pandas để lọc các mục có chứa chuỗi con

>>>

>>> "secret" not in raw_file_content
False
9

Bạn có thể sử dụng

>>> for word in file_content.split():
..    if "secret" in word:
..        print(word)
...
secret
secret.
secret,
secretly
2 trên cột gấu trúc và chuyển chuỗi con đó làm đối số để lọc các hàng chứa chuỗi con

Ghi chú. Toán tử lập chỉ mục (

>>> for word in file_content.split():
..    if "secret" in word:
..        print(word)
...
secret
secret.
secret,
secretly
3) và toán tử thuộc tính (
>>> file_content.index("secret", 60)
66
2) cung cấp các cách trực quan của một cột hoặc lát cắt của Khung dữ liệu

Tuy nhiên, nếu bạn đang làm việc với mã sản xuất liên quan đến hiệu suất, pandas khuyên bạn nên sử dụng các phương pháp truy cập dữ liệu được tối ưu hóa cho

Khi bạn đang làm việc với

>>> for word in file_content.split():
..    if "secret" in word:
..        print(word)
...
secret
secret.
secret,
secretly
2 và bạn cần các tình huống đối sánh phức tạp hơn, bạn cũng có thể sử dụng biểu thức chính quy. Bạn chỉ cần chuyển một mẫu tìm kiếm tuân thủ regex làm đối số chuỗi con

>>>

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
0

Trong đoạn mã này, bạn đã sử dụng cùng một mẫu mà bạn đã sử dụng trước đó để chỉ khớp các từ chứa bí mật nhưng sau đó tiếp tục với một hoặc nhiều ký tự từ (

>>> for word in file_content.split():
..    if "secret" in word:
..        print(word)
...
secret
secret.
secret,
secretly
6). Chỉ một trong số các công ty trong bộ dữ liệu giả mạo này dường như hoạt động bí mật

Bạn có thể viết bất kỳ mẫu biểu thức chính quy phức tạp nào và chuyển nó tới

>>> for word in file_content.split():
..    if "secret" in word:
..        print(word)
...
secret
secret.
secret,
secretly
2 để khắc từ cột gấu trúc của bạn chỉ các hàng mà bạn cần cho phân tích của mình

Phần kết luận

Giống như một thợ săn kho báu bền bỉ, bạn đã tìm thấy từng

>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
5, bất kể nó được cất giấu kỹ đến đâu. Trong quá trình này, bạn đã học được rằng cách tốt nhất để kiểm tra xem một chuỗi có chứa chuỗi con hay không trong Python là sử dụng toán tử thành viên
>>> if "secret" in raw_file_content:
..    print("Found!")
...
Found!
1

Bạn cũng đã học cách mô tả sử dụng hai phương thức chuỗi khác, thường bị lạm dụng để kiểm tra các chuỗi con

  • >>> file_content = title_cased_file_content.lower()
    
    >>> print(file_content)
    hi there and welcome.
    this is a special hidden file with a secret secret.
    i don't want to tell you the secret,
    but i do want to secretly tell you that i have one.
    
    >>> "secret" in file_content
    True
    
    3 để đếm số lần xuất hiện của một chuỗi con trong một chuỗi
  • >>> title_cased_file_content = """Hi There And Welcome.
    .. This Is A Special Hidden File With A Secret Secret.
    .. I Don't Want To Tell You The Secret,
    .. But I Do Want To Secretly Tell You That I Have One."""
    
    >>> "secret" in title_cased_file_content
    False
    
    7 để lấy vị trí chỉ mục của phần đầu của chuỗi con

Sau đó, bạn đã khám phá cách tìm chuỗi con theo các điều kiện nâng cao hơn với các biểu thức chính quy và một số hàm trong mô-đun

>>> file_content = """hi there and welcome.
.. this is a special hidden file with a secret secret.
.. i don't want to tell you the secret,
.. but i do want to secretly tell you that i have one."""

>>> file_content.index("secret")
59
3 của Python

Cuối cùng, bạn cũng đã học cách sử dụng phương pháp DataFrame

>>> for word in file_content.split():
..    if "secret" in word:
..        print(word)
...
secret
secret.
secret,
secretly
2 để kiểm tra mục nào trong DataFrame của gấu trúc chứa chuỗi con

Bây giờ bạn đã biết cách chọn cách tiếp cận thành ngữ nhất khi làm việc với các chuỗi con trong Python. Tiếp tục sử dụng phương pháp mô tả nhất cho công việc và bạn sẽ viết mã thú vị để đọc và nhanh chóng để người khác hiểu

Tải xuống miễn phí. Nhấp vào đây để tải xuống mã mẫu mà bạn sẽ sử dụng để kiểm tra xem một chuỗi có chứa chuỗi con không

Đánh dấu là đã hoàn thành

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Kiểm tra xem biểu thức chính quy trong chuỗi Python

Gửi cho tôi thủ thuật Python »

Giới thiệu về Martin Breuss

Kiểm tra xem biểu thức chính quy trong chuỗi Python
Kiểm tra xem biểu thức chính quy trong chuỗi Python

Martin thích tự động hóa, trò đùa ngớ ngẩn và rắn, tất cả đều phù hợp với cộng đồng Python. Anh ấy thích học hỏi và khám phá và cũng sẵn sàng nói về nó. Anh ấy viết và ghi nội dung cho Real Python và CodingNomads

» Thông tin thêm về Martin


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Kiểm tra xem biểu thức chính quy trong chuỗi Python

Aldren

Kiểm tra xem biểu thức chính quy trong chuỗi Python

Geir Arne

Kiểm tra xem biểu thức chính quy trong chuỗi Python

Ian

Kiểm tra xem biểu thức chính quy trong chuỗi Python

kate

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Làm cách nào để kiểm tra xem mẫu có trong chuỗi Python không?

Dùng find() để kiểm tra xem một chuỗi có chứa chuỗi con khác không . Hàm này trả về vị trí chỉ mục đầu tiên nơi chuỗi con được tìm thấy, nếu không thì trả về -1. string find() function to check if string contains a substring or not. This function returns the first index position where substring is found, else returns -1.

Làm cách nào để xác thực chuỗi bằng regex?

Có thể làm theo các bước sau để tính toán câu trả lời. .
lấy chuỗi
Tạo biểu thức chính quy để xác thực chuỗi đã cho. .
Khớp chuỗi với Regex. .
Trả về true nếu chuỗi khớp với biểu thức chính quy đã cho, ngược lại trả về false

Làm cách nào để kiểm tra xem một chuỗi có chứa một bộ ký tự trong Python không?

Cách dễ nhất và hiệu quả nhất để xem liệu một chuỗi có chứa chuỗi con hay không là sử dụng nếu. trong các câu lệnh , trả về True nếu chuỗi con được phát hiện. Ngoài ra, bằng cách sử dụng hàm find(), có thể lấy chỉ mục mà chuỗi con bắt đầu tại đó hoặc -1 nếu Python không thể tìm thấy chuỗi con.