Tôi có một chuỗi UTF8 với sự kết hợp dấu phụ. Tôi muốn khớp nó với trình tự regex \w
. Nó phù hợp với các ký tự có dấu trọng âm, nhưng không phải nếu có một ký tự latin với sự kết hợp dấu phụ.Python regex w không khớp với dấu phụ?
>>> re.match("a\w\w\wz", u"aoooz", re.UNICODE)
<_sre.SRE_Match object at 0xb7788f38>
>>> print u"ao\u00F3oz"
aoóoz
>>> re.match("a\w\w\wz", u"ao\u00F3oz", re.UNICODE)
<_sre.SRE_Match object at 0xb7788f38>
>>> re.match("a\w\w\wz", u"aoo\u0301oz", re.UNICODE)
>>> print u"aoo\u0301oz"
aóooz
(Hình như processer SO markdown đang gặp rắc rối với các dấu kết hợp ở trên, nhưng có một trên dòng cuối cùng)
Liệu có cách nào để phù hợp với dấu kết hợp với \w
? Tôi không muốn bình thường hóa văn bản bởi vì văn bản này là từ tên tập tin, và tôi không muốn phải làm một toàn bộ 'tên tập tin bình thường unicode' được nêu ra. Đây là Python 2.5.
Có, điều đó sẽ cho tôi biết nếu tôi có một trận đấu, nhưng sau khi thực hiện trận đấu, tôi rút ra các nhóm phù hợp và sau đó làm công cụ với họ. Nếu tôi sử dụng cách tiếp cận của bạn, thì các byte tôi có sau đó sẽ không phải là các byte giống như trong tên tệp – Rory
Tôi hiểu. Bạn có biết liệu các chuỗi có nhất quán trong việc sử dụng các dấu phụ kết hợp (luôn kết hợp hoặc ít nhất là luôn kết hợp hay không trong một chuỗi đơn)? Nếu có, bạn có thể bình thường hóa kết quả thành NFC hoặc NFD một lần nữa nếu cần. Nếu không, tôi nghĩ bạn sẽ phải sử dụng các thủ thuật để phát hiện vị trí kết hợp dấu phụ trong chuỗi gốc, và cố gắng sử dụng thông tin đó để phân tách chỉ các ký tự cần thiết (dĩ nhiên sẽ có nhiều công việc hơn là chỉ phân tách mọi thứ hoặc không có gì). – Steven
Hoặc có thể chỉ cần thay đổi biểu thức và sử dụng các phạm vi cho các dấu phụ kết hợp mà bạn quan tâm và sử dụng một cái gì đó như \ w [\ u0300- \ u036F]? thay vì chỉ \ w – Steven