Имена в форме: Цезарь, Юлий должны быть разделены на First_name Julius Surname Ceasar.Python 3 регулярное выражение с диакритикой и лигатурами,
Имена могут содержать диакритические (á à é ..) и лигатуры (æ, ø)
Этот код, кажется, работает нормально в 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)
Все, кроме U совпадают. (нет совпадений для чисел в именах), но мне интересно, нет ли лучшего способа, чем недискретный не-космический подход. Еще важнее: я хотел бы доработать шаблон, чтобы он отличал капиталы от строчных букв, но включая столичные диакритики и лигатуры, предпочтительно с использованием регулярного выражения. Как будто ([A-Z] [a-z] +) будет соответствовать акцентированным и комбинированным символам.
Возможно ли это?
(что я смотрел до сих пор: Dive into python 3 on UTF-8 vs Unicode; Это Regex tutorial на Unicode (который я не использую), я думаю, что мне не нужно new regex, но я признаю, что я не читал всю свою документацию)
Почему не 'pat = r '^ ([^,] +), (. *) $''? –
@Cristian: не будет ли это также соответствовать 'G @ rd $ tr% m, Joe'? До таких времен мне нужно будет разбирать причудливые twitternames, я бы предпочел. Все же. Но спасибо! – RolfBly