2012-11-07 19 views
7

Tôi cần các giải pháp cho this question, ngoại trừ Python! Tôi đã thử cài đặt thư viện regex cho Python, as apparently cho phép sử dụng các biểu thức POSIX trong các regex của Python, tuy nhiên tôi đoán nó không bao gồm các ký tự Unicode trong lớp [:alpha:]. Ví dụ:Làm cách nào để khớp các ký tự có dấu với một regex bằng Python?

>>> re.search(r'[[:alpha:] ]+','Please work blåbær and NOW stop 123').group(0) 
'Please work bl' 

Khi tôi muốn nó để phù hợp với Please work blåbær and NOW stop

EDIT: Tôi đang sử dụng Python 2.7

EDIT 2: tôi thử như sau:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'Please work blåbær and NOW stop 123').group(0) 
'Please work bl\xc3' 

Không hoàn toàn những gì tôi muốn (tôi muốn kết hợp phần sau ký tự đầu tiên không phải ASCII), b ut ít nhất nó phù hợp với nhân vật hơn trước. Tôi nên làm gì ở đây để làm cho nó khớp với phần còn lại của những gì tôi muốn?

CHỈNH SỬA 3: Tôi không muốn khớp với bất kỳ ký tự nào không phải từ ""; bởi "từ" tôi có nghĩa là a-z, A-Z, không gian và bất kỳ biến thể có dấu của các ký tự từ. Tôi hy vọng tôi có ý tưởng của tôi trên; trong một cụm từ như

lets match força, but stop before that comma 

Tôi chỉ muốn so khớp lets match força

EDIT 4: Vì vậy, tôi cố gắng sử dụng Python 3 chỉ dành riêng cho một kịch bản này:

>>> re.search(re.compile('[\w ]+', re.UNICODE),'lets match força, but stop before that comma').group(0) 
'lets match força' 

Tôi đoán nó hoạt động cho hầu hết các phần trong Python 3, ngoại trừ nó cũng phù hợp với số (mà tôi chắc chắn không muốn) và gạch dưới. Bất kỳ cách nào để sửa lỗi này, bằng Python 2 hoặc 3?

Trả lời

2

Không rõ phiên bản python nào bạn đang sử dụng. nếu bạn sử dụng 2.x thì bạn có thể gặp vấn đề unicode. xem số post này để biết thêm chi tiết và vui lòng cập nhật câu hỏi của bạn để xây dựng thêm.

Im khá surprissed, mà tôi không thể chuyển đổi các ký tự có dấu để đại diện unicode đúng ...

nhưng có những cách giải quyết:

re.search(re.compile('((\w+\s)|(\w+\W+\w+\s))+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0) 

hoặc

re.search(re.compile('\D+', re.UNICODE), ur'Please work blåbær and NOW stop 123').group(0)