名字在形式:凯撒,朱利叶斯将分裂为First_name朱利叶斯姓凯撒。
名称可能包含diacritics (áàé..)和连接体( ligatures (aáàé))。
在Python3.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)除了你的匹配。(名字中的数字不匹配),但我不知道是否有比非数字的非空间方法更好的方法。不过,更重要的是:我想要改进这个模式,这样它可以从小写字母中提取大写字母,但包括大写字母和连接体,最好也使用regex。似乎( As +)将匹配重音字符和组合字符。
这个是可能的吗?
(到目前为止,我看到的是:Dive into python 3 on UTF-8 vs Unicode;Unicode上的这个Regex tutorial (我没有使用);我认为我不需要new regex,但我承认我还没有看过它的所有文档)
发布于 2013-04-10 21:07:15
如果要使用标准库的re模块区分大写字母和小写字母,那么恐怕必须手动构建所有相关Unicode代码点的字符类。
如果您真的不需要这样做,请使用
[^\W\d_]以匹配任何Unicode字母。此字符类匹配任何“非字母数字字符”(与“字母数字字符”相同)也不是数字或下划线的字符。
https://stackoverflow.com/questions/15936315
复制相似问题