Имена в форме: Цезарь, Юлий разделяются на Имя Юлий Фамилия Цезарь.
Имена могут содержать диакритические знаки (á à é ..) и лигатуры (æ, ø).
Кажется, этот код работает нормально в 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)
Все, кроме тебя, совпадают. (нет совпадений для чисел в именах), но мне интересно, нет ли лучшего способа, чем нецифровой непространственный подход. Но что еще важнее: я хотел бы уточнить шаблон, чтобы он отделял заглавные буквы от строчных, но включая диакритические знаки и лигатуры заглавных букв, желательно также с использованием регулярных выражений. Как если бы ([A-Z] [a-z] +) соответствовал бы акцентированным и комбинированным символам.
Это возможно?
(то, на что я смотрел до сих пор: Погрузитесь в python 3 на UTF-8 против Unicode; Это Regex учебник по Unicode (который я не использую); я думаю, мне не нужен новое регулярное выражение, но я признаю, что не прочитал всю его документацию)
pat = r'^([^,]+), (.*)$'
? - person Cristian Ciupitu   schedule 11.04.2013