Khi tôi cố gắng sử dụng cụm từ thông dụng để tìm chuỗi trong các chuỗi khác, nó không hoạt động như mong đợi. Dưới đây là một ví dụ:Tìm kiếm các chuỗi bằng cách sử dụng cụm từ thông dụng trong Python
import re
message = 'I really like beer, but my favourite beer is German beer.'
keywords = ['beer', 'german beer', 'german']
regex = re.compile("|".join(keywords))
regex.findall(message.lower())
Kết quả:
['beer', 'beer', 'german beer']
Nhưng kết quả dự kiến sẽ là:
['beer', 'beer', 'german beer', 'german']
Một cách khác để làm điều đó có thể là:
results = []
for k in keywords:
regex = re.compile(k)
for r in regex.findall(message.lower()):
results.append(r)
['beer', 'beer', 'beer', 'german beer', 'german']
Nó hoạt động như tôi muốn, nhưng tôi nghĩ nó là n ot cách tốt nhất để làm điều đó. Ai đó có thể giúp tôi được không?
Các người hỏi không chỉ muốn kiểm tra xem một chuỗi đặc biệt là một phần của một chuỗi nhưng ông muốn tất cả các lần xuất hiện của một chuỗi cụ thể. Trong trường hợp này, việc sử dụng 're.findall()' là cách tốt nhất để thực hiện điều đó. Tránh các biểu thức chính quy sẽ làm cho giải pháp này mất thời gian hơn mức cần thiết. – pemistahl
Cảm ơn các bạn đã trả lời. Bây giờ tôi biết tôi đang sử dụng một chức năng sai (findall), vì vậy những gì bạn đề nghị để tìm các trận đấu, bao gồm cả overlappings? –
@ Adrián: Bạn có cần sức mạnh của cụm từ thông dụng hay bạn chỉ muốn tìm các chuỗi cố định? –