Imiona w postaci: Ceasar, Julius zostaną podzielone na Imię First Julius Nazwisko Ceasar.Python 3 regex z znakami diakrytycznymi i ligaturami,
Nazwy mogą zawierać znaków diakrytycznych (á A E ..) i ligatury (AE O)
Kod ten wydaje się działać OK w Pythonie 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)
Wszystkie z wyjątkiem u dopasować. (nie pasuje do liczb w nazwach), ale zastanawiam się, czy nie ma lepszej metody niż niecyfrowe podejście inne niż kosmiczne. Co ważniejsze: Chciałbym zawęzić wzór, aby odróżniał wielkie litery od małych liter, ale w tym kapitalnych znaków diakrytycznych i ligatur, najlepiej używając również regex. Tak jakby ([A-Z] [a-z] +) pasowałoby do znaków akcentowanych i połączonych.
Czy to możliwe?
(co szukałem w tak daleko: Dive into python 3 on UTF-8 vs Unicode; Ten Regex tutorial na Unicode (którego nie używam), myślę, że nie trzeba new regex ale muszę przyznać, że nie czytałem całą swoją dokumentację)
Dlaczego nie 'pat = r '^ ([^,] +), (. *) $''? –
@Cristian: czy to też nie pasuje do "G @ rd $ tr% m, Joe"? Do tego czasu będę musiał parsować artystyczne twitternames, wolałbym nie. Jeszcze. Ale dziękuję! – RolfBly