2011-06-29 14 views
7

Próbuję użyć wyrażeń regularnych, aby znaleźć trzy lub więcej tego samego znaku w ciągu znaków. Na przykład: "Witam" nie pasowałby do "ohhh".pasujące 3 lub więcej tego samego znaku w python

próbowałem robić takie rzeczy jak:

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

ale nie wydają się działać.

+0

Co jest nie tak z drugim podejściem? (Będzie pasował co najmniej 6 znaków, ale zasadniczo powinien działać) – stema

+0

te same trzy znaki po kolei, lub po prostu ta sama postać powtórzona trzy razy w dowolnym miejscu ciągu? tj. czy "hohoho" będzie pasowało czy nie? – Spudley

+0

Drugie podejście działa, choć nieznacznie zmodyfikowane do r '(\ w) \ 1 {2,}'. Używałem .match zamiast .search, dlatego nie widziałem oczekiwanych wyników. – Adam

Odpowiedz

10

(\w)\1{2,} to szukane wyrażenie.

W Pythonie może to być podane jak r"(\w)\1{2,}"

2

jeśli szukasz tego samego znaku trzy razy po kolei, można to zrobić:

(\w)\1\1 

jeśli chcesz znaleźć ten sam charakter trzy czasy w dowolnym miejscu łańcucha, trzeba postawić kropkę i gwiazdkę między częściami wypowiedzi powyżej, jak tak:

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

.* dopasowuje dowolną liczbę dowolnych znaków, więc to wyrażenie powinno pasować do dowolnego ciągu, który ma dowolny pojedynczy znak słowny, który pojawia się trzy lub więcej razy, z dowolną liczbą znaków pomiędzy nimi.

Nadzieję, że pomaga.

Powiązane problemy