Khi sử dụng Python 3, một tập lệnh đơn giản như sau sẽ chạy như mong đợi, nhưng dường như bị nghẹt các chuỗi biểu tượng cảm xúc unicode:
import re
cụm từ = "(╯°□°)╯ ︵ ┻━┻"
mẫu = r'\b{0}\b'.format(cụm từ)
text = "Con cáo nâu nhanh nhẹn mệt mỏi vì nhảy qua chó và lật bàn: (╯°□°)╯ ︵ ┻━┻"
if re.search(pattern, text, re.IGNORECASE) != Không có:
print("Đã khớp!")
Nếu tôi thay thế nội dung của biến cụm từ bằng từ "cáo", thì mẫu sẽ khớp. Tôi đã bối rối không biết tại sao nó không thích chuỗi cụ thể này và việc khám phá hướng dẫn sử dụng cũng như Stack Overflow của tôi không làm sáng tỏ nhiều vấn đề. Theo như tôi biết, Python 3 có thể xử lý việc này mà không gặp vấn đề gì.
Tôi có thiếu điều gì đó hiển nhiên không?
EDIT: Ngoài ra, việc xóa ranh giới (\b) không ảnh hưởng đến khả năng khớp chuỗi.
(╯°□°)╯ ︵ ┻━┻
Biểu thức này có dấu ngoặc đơn bên trong, bạn cần thoát khỏi chúng. Nếu không, chúng sẽ được hiểu là nhóm.
Trong [24]: re.search(r'\(╯°□°\)╯ ︵ ┻━┻', văn bản, re.IGNORECASE)
Out[24]: <_sre.SRE_Match đối tượng; span=(72, 85), match='(╯°□°)╯ ︵ ┻━┻'>
Trong [25]: re.findall(r'\(╯°□°\)╯ ︵ ┻━┻', văn bản, re.IGNORECASE)
Ra[25]: ['(╯°□°)╯ ︵ ┻━┻']
Thoát khỏi chuỗi biểu thức chính quysửa và thay đổi mã của bạn thành:
import re
cụm từ = "(╯°□°)╯ ︵ ┻━┻"
mẫu = re.escape(cụm từ)
text = "Con cáo nâu nhanh nhẹn mệt mỏi vì nhảy qua chó và lật bàn: (╯°□°)╯ ︵ ┻━┻"
if re.search(pattern, text, re.IGNORECASE) != Không có:
print("Đã khớp!")
Sau đó, nó sẽ hoạt động như mong đợi:
$ python3a.py
Đã khớp!
Tôi là một lập trình viên xuất sắc, rất giỏi!