Nếu bạn muốn kết hợp chính xác của các từ thì hãy xem xét từ mã thông báo từ chuỗi đích. Tôi sử dụng Word_Tokenize được đề xuất từ NLTK:
from nltk.tokenize import word_tokenize
Đây là chuỗi mã thông báo từ câu trả lời được chấp nhận:
a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
Câu trả lời được chấp nhận được sửa đổi như sau:
matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
Như trong câu trả lời được chấp nhận, từ "nhiều hơn" vẫn còn khớp. Tuy nhiên, nếu "MO" trở thành một chuỗi khớp, câu trả lời được chấp nhận vẫn tìm thấy một trận đấu. Đó là một hành vi mà tôi không muốn.
matches_2 = ["mo", "wholesome", "milk"]
[x in a_string for x in matches_1]
Out[43]: [True, False, False]
Sử dụng mã thông báo Word, "Mo" không còn khớp nữa:
[x in tokens for x in matches_2]
Out[44]: [False, False, False]
Đó là hành vi bổ sung mà tôi muốn. Câu trả lời này cũng trả lời câu hỏi trùng lặp ở đây.
Kiểm tra xem chuỗi có chứa chất nền trong Python không
Kiểm tra xem một chuỗi có chứa chuỗi con có phải là một trong những tác vụ phổ biến nhất trong bất kỳ ngôn ngữ lập trình nào. Python cung cấp nhiều cách để kiểm tra xem một chuỗi có chứa chuỗi con không. Cách đơn giản và nhanh nhất để kiểm tra xem một chuỗi có chứa chuỗi con hay không trong Python có sử dụng toán tử "trong" hay không, được sử dụng làm toán tử so sánh. Một số phương thức Python khác như Find [], Index [], Count [], v.v. cũng giúp kiểm tra xem một chuỗi có chứa chuỗi con không.contains a substring is one of the most common tasks in any programming language. Python offers many ways to check if a string contains a substring. The simplest and fastest way to check whether a string contains a substring or not in Python is using the "in" operator , which is used as a comparison operator . Some other Python methods such as find[], index[], count[] etc. also help to Check if a string contains a substring.
Sử dụng toán tử "In" của Python
Cách đơn giản và nhanh nhất để kiểm tra xem một chuỗi có chứa chuỗi con hay không trong Python là toán tử "trong". Toán tử này trả về true nếu chuỗi chứa các ký tự, nếu không, nó sẽ trả về sai.fastest way to check whether a string contains a substring or not in Python is the "in" operator . This operator returns true if the string contains the characters, otherwise, it returns false .
đầu ra
Toán tử Python "In" có hai đối số, một ở bên trái và một bên phải và trả về true nếu chuỗi đối số bên trái được chứa trong chuỗi đối số bên phải."in" operator takes two arguments, one on the left and one on the right, and returns True if the left argument string is contained within the right argument string.
Thêm về toán tử "In"
Lưu ý: Toán tử "In" là trường hợp nhạy cảm, nó sẽ xử lý các ký tự chữ hoa và các ký tự thường khác nhau.case sensitive i.e, it will treat the Uppercase characters and Lowercase characters differently.
__contains __ [] hàm
Lớp Chuỗi Python có phương thức __Contains __ [] mà chúng ta có thể sử dụng để kiểm tra xem nó có chứa chuỗi khác hay không. Khi chúng ta sử dụng Python "trong" toán tử, bên trong, nó gọi __Contains __ [] hàm. Phương thức __contains__ định nghĩa cách thức hoạt động của lớp khi chúng xuất hiện ở phía bên phải của in và không trong toán tử. Chúng ta cũng có thể sử dụng chức năng này trực tiếp, nhưng đừng. Các phương pháp bắt đầu với dấu gạch dưới được coi là riêng tư về mặt ngữ nghĩa, tuy nhiên bạn nên sử dụng trong nhà điều hành cho mục đích đọc.__contains__[] method that we can use to check if it contains another string or not. When we use Python "in" operator , internally it calls __contains__[] function. The __contains__ method defines how instances of class behave when they appear at right side of in and not in operator. We can use this function directly too, but don't . Methods that start with underscores are considered semantically private , however it's recommended to use in operator for readability purposes.
Sử dụng phương thức str.find [] của Python
Một phương thức khác bạn có thể sử dụng là phương thức chuỗi.find []. Phương thức Find [] đánh giá nếu chuỗi chứa một chuỗi con. Nếu có, phương thức Find [] trả về chỉ số bắt đầu của một chuỗi con trong chuỗi nếu không nó sẽ trả về -1.string.find[] method . The find[] method evaluate if the string contains a substring . If it does, the find[] method returns the starting index of a substring within the string otherwise it returns -1 .
đầu ra
Thêm phương thức find []
Sử dụng phương thức str.find [] là cách ít pythonic, nhưng nó vẫn được chấp nhận. Nó dài hơn và khó hiểu hơn một chút, nhưng nó vẫn hoàn thành công việc.str.find[] method is the less Pythonic way , but it's still accepted. It's longer and a little bit more confusing, but it still gets the job done.
Sử dụng biểu thức thông thường Python
Biểu thức chính quy được sử dụng rộng rãi để khớp mẫu. Python có một gói tích hợp có tên Re, có thể được sử dụng để làm việc với các biểu thức thông thường. Mô -đun RE chứa một hàm gọi là search [], nó 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.pattern matching . Python has a built-in package called re , which can be used to work with Regular Expressions . The re module contains a function called search[] , it can be used to check if a string contains the specified search pattern .
thí dụ
đầu ra
Thêm phương thức find []
Sử dụng phương thức str.find [] là cách ít pythonic, nhưng nó vẫn được chấp nhận. Nó dài hơn và khó hiểu hơn một chút, nhưng nó vẫn hoàn thành công việc.number of occurrences of a specific substring in a string, then you can use Python count[] method . If the substring is not found in a string, the function returns 0 .
Kiểm tra xem một chuỗi có chứa một tập hợp các ký tự không
Tín dụng: Jürgen Hermann, Horst Hansen
Vấn đề
Bạn cần kiểm tra sự xuất hiện của bất kỳ bộ ký tự nào trong chuỗi.
Dung dịch
Giải pháp khái quát hóa cho bất kỳ chuỗi nào [không chỉ là một chuỗi] và bất kỳ tập hợp nào [bất kỳ đối tượng nào trong đó có thể kiểm tra thành viên với toán tử
a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
5, không chỉ là một trong các ký tự]:def containsAny[str, set]: """ Check whether sequence str contains ANY of the items in set. """ return 1 in [c in str for c in set] def containsAll[str, set]: """ Check whether sequence str contains ALL of the items in set. """ return 0 not in [c in str for c in set]
Thảo luận
Mặc dù các phương thức chuỗi
a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
6 và a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
7 có thể kiểm tra các lần xuất hiện của chuỗi con, không có chức năng nào được tạo sẵn để kiểm tra sự xuất hiện trong một chuỗi của một tập hợp các ký tự.Trong khi làm việc với một điều kiện để kiểm tra xem một chuỗi có chứa các ký tự đặc biệt được sử dụng trong hàm thư viện tiêu chuẩn
a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
8 hay không, tôi đã đưa ra mã trên [với sự trợ giúp từ kênh OpenProjects IRC a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
9]. Được viết theo cách này, nó thực sự tương thích với suy nghĩ của con người, mặc dù bạn có thể không đưa ra mã đó bằng trực giác. Đó thường là trường hợp với sự hiểu biết danh sách.Mã sau đây tạo danh sách các giá trị ____ 20/________ 21, một cho mỗi mục trong tập hợp:
[c in str for c in set]
Sau đó, mã này kiểm tra xem có ít nhất một giá trị thực trong danh sách đó không:
1 in [c in str for c in set]
Tương tự, điều này kiểm tra xem không có giá trị giả nào có trong danh sách:
0 not in [c in str for c in set]
Các ví dụ sử dụng được sử dụng tốt nhất dưới dạng các bài kiểm tra đơn vị được gắn vào tệp nguồn
matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
2 của mô -đun này, với thành ngữ thông thường để đảm bảo rằng các thử nghiệm thực thi nếu mô -đun chạy dưới dạng tập lệnh chính:if _ _name_ _ == "_ _main_ _": # unit tests, must print "OK!" when run assert containsAny['*.py', '*?[]'] assert not containsAny['file.txt', '*?[]'] assert containsAll['43221', '123'] assert not containsAll['134', '123'] print "OK!"
Tất nhiên, trong khi các thành ngữ trước đó gọn gàng, có những lựa chọn thay thế [luôn luôn ở đó?]. Dưới đây là những người ở cơ bản nhất và do đó, theo một nghĩa nào đó, những người thay thế pythonic nhất:
a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
0Dưới đây là một số lựa chọn thay thế đảm bảo vòng lặp tối thiểu [lợi nhuận sớm nhất có thể]. Đây là những điều súc tích nhất và do đó, theo một nghĩa nào đó, mạnh mẽ nhất:
a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
1Dưới đây là một số biến thể mỏng hơn của loại sau dựa vào một phương pháp đặc biệt chỉ cung cấp cho các đối tượng chỉ trong Python 2.2 trở lên:
a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
2Và đây là một biến thể khó khăn dựa vào chức năng cũng có sẵn trong 2.0:
a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
3May mắn thay, cách tiếp cận khá khó khăn này thiếu một biến thể rõ ràng ngay lập tức áp dụng để thực hiện
matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
3. Tuy nhiên, một sơ đồ khó khăn cuối cùng, dựa trên khả năng xóa tất cả các ký tự trong một bộ, áp dụng cho cả hai chức năng:a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
4Thủ thuật này ít nhất có một số độ sâu, nó dựa vào
matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
5 là phần sau của matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
6 được tạo thành từ các ký tự không phải trong matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
7. Nếu chuỗi con đó có cùng độ dài với matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
6, thì không có ký tự nào bị xóa bởi matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
9, do đó, không có ký tự của matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
6 là trong matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
7. Ngược lại, nếu chuỗi con đó có độ dài 0, tất cả các ký tự đã bị xóa, vì vậy tất cả các ký tự của matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
6 đều ở trong matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
7. Phương pháp matches_2 = ["mo", "wholesome", "milk"]
[x in a_string for x in matches_1]
Out[43]: [True, False, False]
4 của các đối tượng chuỗi tiếp tục xuất hiện một cách tự nhiên khi người ta muốn coi các chuỗi là bộ ký tự, một phần vì nó rất nhanh và một phần vì nó rất tiện dụng và linh hoạt. Xem Công thức 3.8 cho một ứng dụng tương tự khác.Một quan sát cuối cùng là những cách khác nhau để tiếp cận nhiệm vụ có mức độ tổng quát rất khác nhau. Ở một thái cực, các cách tiếp cận sớm nhất, chỉ dựa vào
a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
5 [để lặp lại trên matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
7 và để thành viên trong matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
6] là chung nhất; Chúng hoàn toàn không giới hạn trong việc xử lý chuỗi và chúng đưa ra nhu cầu thực sự tối thiểu về các biểu diễn của matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
7 và matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
6. Ở một thái cực khác, cách tiếp cận cuối cùng, dựa vào phương pháp matches_2 = ["mo", "wholesome", "milk"]
[x in a_string for x in matches_1]
Out[43]: [True, False, False]
4, chỉ hoạt động khi cả matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
7 và matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
6 là chuỗi hoặc bắt chước các đối tượng chuỗi gần gũi.Xem thêm
Công thức 3,8; Tài liệu cho các hàm
matches_2 = ["mo", "wholesome", "milk"]
[x in a_string for x in matches_1]
Out[43]: [True, False, False]
4 và [x in tokens for x in matches_2]
Out[44]: [False, False, False]
4 trong mô -đun [x in tokens for x in matches_2]
Out[44]: [False, False, False]
5 trong tham chiếu thư viện.Library Reference.