Menghins ha scritto:
Tuttavia ho un dubbio sul fatto che l'espressione pur riuscendo a trovare i caratteri doppi all'interno di una parola, non possa distinguere i risultanti che contengono solo le doppie dai risultati che tre occorrenze consecutive dello stesso carattere o più
Con l'espressione in stringa "(\\w)\\1+" catturi qualunque sequenza di 2 o più lettere uguali. Se fai solo un find, con un input "aaabbcccc" esso prende subito "aaa" .. non "bb".
Se usassi la espressione in stringa "(\\w)\\1" (senza +) catturi 2 lettere uguali ma ... potrebbero essere in una sequenza di più di 2 lettere. Quindi con un solo find e con un input "aaabbcccc" idem prende subito "aa".
A "naso" non credo si possa fare una espressione regolare che con un solo find vada a prendere esattamente una coppia di lettere che non siano dentro una sequenza più lunga. Credo nemmeno usando i costrutti avanzati che sono i
lookahead e
lookbehind. Ma non ne sono sicuro al 100%. Dovrei fare un po' di esperimenti per valutare se è possibile o no.
Continuando ad usare "(\\w)\\1+", quello che sicuramente puoi fare è il find in loop (while) cioè finché find() dà true e poi verificare la lunghezza della stringa catturata da group(). Se è lunga esattamente 2 allora hai una
vera coppia.