Nomi nella forma: Cesare, Giulio devono essere suddivisi in Nome Cognome Giulio.Python 3 regex con segni diacritici e legature,
nomi possono contenere segni diacritici (Â Â E ..), e legature (æ, ø)
Questo codice sembra funzionare bene in Python 3,3
import re
def doesmatch(pat, str):
try:
yup = re.search(pat, str)
print('Firstname {0} lastname {1}'.format(yup.group(2), yup.group(1)))
except AttributeError:
print('no match for {0}'.format(str))
s = 'Révèrberë, Harry'
t = 'Åapö, Renée'
u = 'C3po, Robby'
v = 'Mærsk, Efraïm'
w = 'MacDønald, Ron'
x = 'Sträßle, Mpopo'
pat = r'^([^\d\s]+), ([^\d\s]+)'
# matches any letter, diacritic or ligature, but not digits or punctuation inside the()
for i in s, t, u, v, w, x:
doesmatch(pat, i)
Tutti tranne u corrispondono. (nessuna corrispondenza per i numeri nei nomi), ma mi chiedo se non esiste un modo migliore rispetto all'approccio non spaziale non numerico. Ancora più importante: mi piacerebbe perfezionare lo schema in modo che distingua maiuscole dalle lettere minuscole, ma compresi i segni diacritici e legature di capitale, preferibilmente usando anche espressioni regolari. Come se ([A-Z] [a-z] +), corrispondesse ai caratteri accentati e combinati.
È possibile?
(quello che ho guardato finora: Dive into python 3 on UTF-8 vs Unicode; Questo Regex tutorial su Unicode (che non sto usando), penso non ho bisogno new regex ma ammetto non ho letto tutta la sua documentazione)
Perché non 'pat = r '^ ([^,] +), (. *) $''? –
@Cristian: non corrisponde anche a "G @ rd $ tr% m, Joe"? Fino a quando non avrò bisogno di analizzare i nomi di fantasia artistici, preferirei di no. Ancora. Ma grazie! – RolfBly