表单中的名称: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)
除了数字不匹配外,其他都匹配(即名称中没有数字),但我想知道是否有比非数字非空格的方法更好。 更重要的是:我想改进模式,使其区分大小写字母,但是包括大写变音符号和连字号,最好也使用正则表达式。 就像([A-Z] [a-z] +)一样,可以匹配带变音符号和组合字符的字母。
这可行吗?
(到目前为止我所看过的内容: Dive into python 3 on UTF-8 vs Unicode ; 这个Unicode正则表达式教程(我没有使用它); 我认为我不需要new regex,但我承认我没有阅读所有的文档)
pat = r'^([^,]+), (.*)$'
? - Cristian Ciupitu