2009-12-07 4 views
1

Une règle dont j'ai besoin est que si la dernière voyelle (aeiou) d'une chaîne est avant un caractère de l'ensemble ('t', 'k', 's', ' tk '), un : doit être ajouté juste après la voyelle.Expression régulière recherche/remplacement aide nécessaire, Python

Ainsi, en Python si j'ai la chaîne "orchestras" je besoin d'une règle qui va le transformer en "orchestra:s"

edit: Le (t, k, s, tk) serait le dernier caractère (s) dans le string

+1

Même si je n'ai pas de réponse, je suis curieux de savoir comment l'appliquer. – StrixVaria

+0

'tk' est un personnage? –

Répondre

6
re.sub(r"([aeiou])(t|k|s|tk)([^aeiou]*)$", r"\1:\2\3", "orchestras") 
re.sub(r"([aeiou])(t|k|s|tk)$",   r"\1:\2", "orchestras") 

Vous ne dites pas s'il peut y avoir d'autres consonnes après le t/k/s/tk. La première regex permet cela tant qu'il n'y a plus de voyelles, donc ça va changer "fist" en "fi: st" par exemple. Si le mot doit se terminer par le t/k/s/tk, alors utilisez la deuxième regex, qui ne fera rien pour "poing".

0

Si vous ne l'avez pas encore compris, je vous recommande d'essayer [racine_python] /tools/scripts/redemo.py C'est une zone d'essai agréable.

0

une autre prise sur le regex de remplacement:

re.sub("(?<=[aeiou])(?=(?:t|k|s|tk)$)", ":", "orchestras") 

Celui-ci n'a pas besoin de remplacer l'utilisation de groupes souvenaient.