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'^([^ds]+), ([^ds]+)'
# 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匹配外 (名称中的数字不匹配),但我想知道是否没有比非数字非空间方法更好的方法。 更重要的是:我想改进模式,以便区分大小写字母,但包括大写的变音符号和连字符,最好还使用正则表达式。 如果([AZ] [az] +)将匹配重音和组合字符。

这可能吗?

(到目前为止我已经看过:在UTF-8和Unicode之间切入python 3;在Unicode上这个正则表达式教程(我不使用);我认为我不需要新的正则表达式,但我承认我没有'阅读所有文档)


如果要使用标准库的re模块区分大小写字母,那么恐怕必须手动构建所有相关Unicode代码点的字符类。

如果你不需要这样做,请使用

[^Wd_]

以匹配任何Unicode字母。 该字符类匹配任何“非非字母数字字符”(与“字母数字字符”相同),也不是数字或下划线。

链接地址: http://www.djcxy.com/p/12749.html

上一篇: Python 3 regex with diacritics and ligatures,

下一篇: MySQL database schema for user and group access control