tmp, out = "",""
for ch in s:
if ch.isspace() or ch in {",", "."}:
out += "{}{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1], ch) if len(tmp) > 3 else tmp + ch
tmp = ""
else:
tmp += ch
out += "{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1]) if len(tmp) > 3 else tmp
print(out)
a11y,r4m g2d bye
Se desideri solo caratteri alfa utilizzano str.isalpha:
tmp, out = "", ""
for ch in s:
if not ch.isalpha():
out += "{}{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1], ch) if len(tmp) > 3 else tmp + ch
tmp = ""
else:
tmp += ch
out += "{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1]) if len(tmp) > 3 else tmp
print(out)
a11y,r4m g2d bye
La logica è la stessa per entrambi, è proprio quello che controlliamo per che si differenzia, se not ch.isalpha()
è falso abbiamo trovato un carattere non alpha, quindi dobbiamo elaborare la stringa tmp e aggiungerla alla stringa di output. if len(tmp)
non è maggiore di 3
in base al requisito, aggiungiamo semplicemente la stringa tmp più il carattere corrente alla nostra stringa esterna.
Abbiamo bisogno di un finale out += "{}{}{}
fuori dal ciclo per catturare quando una stringa non finisce in una virgola, spazio ecc. Se la stringa terminasse in un non-alfa, aggiungeremmo una stringa vuota in modo da non rendere differenza per l'uscita.
Si manterrà la punteggiatura e spazi:
s = "accessibility,random good bye !! foobar?"
def func(s):
tmp, out = "", ""
for ch in s:
if not ch.isalpha():
out += "{}{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1], ch) if len(tmp) > 3 else tmp + ch
tmp = ""
else:
tmp += ch
return "{}{}{}".format(tmp[0], len(tmp) - 2, tmp[-1]) if len(tmp) > 3 else tmp
print(func(s,3))
a11y,r4m g2d bye !! f4r?
're' è un po 'eccessivo per questo, a mio parere. Userei semplicemente 'mystring [0] + str (len (mystring) -2) + mystring [-1]' e un'istruzione 'if' per vedere quando applicare questo –
@AleksanderLidtke Ci ho pensato ma poi' mystring 'ha singole parole separate (come' accessibilità, random good arrivederci ') e non è una parola. –
@AleksanderLidtke, che dire della virgola? Come stai separando le parole? –