2011-06-29 47 views
7

Tôi đang cố sử dụng cụm từ thông dụng để tìm ba hoặc nhiều ký tự giống nhau trong một chuỗi. Ví dụ: 'hello' sẽ không khớp với 'ohhh'.khớp với 3 hoặc nhiều ký tự giống nhau trong python

tôi đã cố gắng làm những việc như:

re.compile('(?!.*(.)\1{3,})^[a-zA-Z]*$') 
re.compile('(\w)\1{5,}') 

nhưng không có vẻ làm việc.

+0

Có gì sai với cách tiếp cận thứ hai của bạn? (Nó sẽ khớp ít nhất 6 ký tự, nhưng về cơ bản nó sẽ hoạt động) – stema

+0

cùng ba ký tự liên tiếp, hoặc chỉ cùng một ký tự lặp lại ba lần ở bất kỳ đâu trong chuỗi? tức là 'hohoho' có phù hợp hay không? – Spudley

+0

Cách tiếp cận thứ hai không hoạt động, mặc dù hơi được sửa đổi thành r '(\ w) \ 1 {2,}'. Tôi đã sử dụng .match thay vì .search, đó là lý do tại sao tôi không nhìn thấy kết quả mà tôi mong đợi. – Adam

Trả lời

10

(\w)\1{2,} là regex bạn đang tìm kiếm.

Trong Python nó có thể được trích dẫn như r"(\w)\1{2,}"

2

nếu bạn đang tìm kiếm các nhân vật cùng ba lần liên tiếp, bạn có thể làm điều này:

(\w)\1\1 

nếu bạn muốn tìm các nhân vật cùng ba thời gian ở bất kỳ đâu trong chuỗi, bạn cần đặt dấu chấm và dấu sao giữa các phần của biểu thức ở trên, như sau:

(\w).*\1.*\1 

.* khớp với bất kỳ số nào của bất kỳ ký tự nào, vì vậy biểu thức này phải khớp với bất kỳ chuỗi nào có bất kỳ ký tự từ đơn nào xuất hiện từ ba lần trở lên, với bất kỳ số ký tự nào ở giữa chúng.

Hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan