È statali che si prendono di mira una parola contro una linea, quindi prima serie ancore a che fare solo con le parole:
\b[regex will go here]\b
^ ^ assert a word boundary
Avanti, due punti preceduto da e seguita da un [aeiou]
con altri due [aeiou]
nella parte successiva ai due punti. Presumo che il caso sia indipendente?
(?i)(\b\w+[aeiou]):((?:[aeiou][^aeiou\s\W]*){3}\b)
^match a character that is NOT vowel, space or not a
^ \W=[^a-zA-Z0-9_]
Demo
(Si noti l'uso di [^aeiou\W]
che è lettere consonanti, numeri e _ ma non altri personaggi Demo.)
Python demo:
import re
tests={
'matches':[
'we:aanyoh',
'hiru:atghigu',
'yo:ubeki'
],
'no match':[
'wz:ubeki',
'we:a anyoh',
'yo:ubek',
'hiru:atghiguu'
]
}
for k, v in tests.items():
print k
for e in v:
s=re.sub(r'(?i)(\b\w+[aeiou]):((?:[aeiou][^aeiou\s\W]*){3}\b)', r'\1\2', e)
print '\t{} > {}'.format(e, s)
Prints:
matches
we:aanyoh > weaanyoh
hiru:atghigu > hiruatghigu
yo:ubeki > youbeki
no match
wz:ubeki > wz:ubeki
we:a anyoh > we:a anyoh
yo:ubek > yo:ubek
hiru:atghiguu > hire:atghiguu
Questo gestirà solo le parole con un singolo punto.Se vuoi abbinare parole che hanno più punti, ma hanno lo stesso modello, modifica il modello LH per avere la classe di caratteri che include i due punti e un'ancora che non è \b
.
Esempio: (?i)(^[\w:]+[aeiou]):((?:[aeiou][^aeiou\s\W]*){3}\b)
Quindi, fondamentalmente la ricerca di due vocali collegati da due punti? – Ionut
il colon deve essere compreso tra il 3 ° e il 4 ° conteggio delle vocali dalla fine della parola. quindi il 1 ° esempio dato si interromperà in questo modo w4: 32ny1h. – user2743
Bello specificare :) pensato dopo aver decodificato il tuo pattern :) – Ionut