名称形式为:Ceasar,Julius 将被拆分为 First_name Julius Surname Ceasar。
名称可能包含变音符号 (á à é ..) 和连字 (æ, ø)
此代码在 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)
除了你之外的所有匹配。(名称中的数字不匹配),但我想知道是否没有比非数字非空格方法更好的方法。更重要的是:我想改进模式,以便区分大写字母和小写字母,但是包括大写变音符号和连字,最好也使用正则表达式。好像 ([AZ][az]+),将匹配重音字符和组合字符。
这可能吗?
(到目前为止我所看到的: Dive into python 3 on UTF-8 vs Unicode;这个关于 Unicode 的正则表达式教程(我没有使用);我认为我不需要新的正则表达式,但我承认我没有t 阅读其所有文档)