Namen in der Form: Ceasar, Julius sind in Vorname Julius Nachname Ceasar aufgeteilt werden.Python 3 Regex mit Diakritika und Ligaturen,
Namen enthalten können diakritische Zeichen (á à é ..), und Ligaturen (æ, ø)
Dieser Code scheint 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)
Alle außer u passen gut zu funktionieren. (Keine Übereinstimmung mit Zahlen in Namen), aber ich frage mich, ob es einen besseren Weg gibt als den Nicht-Ziffern-Nicht-Raum-Ansatz. Wichtiger noch: Ich möchte das Muster so verfeinern, dass es Großbuchstaben von Kleinbuchstaben unterscheidet, aber einschließlich Kapitaldiacritics und Ligaturen, vorzugsweise mit Regex auch. Als ob ([A-Z] [a-z] +), akzentuierte und kombinierte Zeichen zusammenbringen würde.
Ist das möglich?
(was ich bei bisher sah: Dive into python 3 on UTF-8 vs Unicode; Diese Regex tutorial auf Unicode (was ich bin nicht), ich glaube, ich nicht new regex brauche, aber ich gebe zu, ich habe nicht alle seine Dokumentation lesen)
Warum nicht 'pat = r '^ ([^,] +), (. *) $'? –
@Cristian: würde das nicht auch "G @ rd $ tr% m, Joe" entsprechen? Bis dahin muss ich künstlerische Twitternamen parsen, das möchte ich lieber nicht. Noch. Aber danke! – RolfBly