带有变音符号和连字的Python 3正则表达式,

时间:2013-04-10 21:00:49

标签: python regex diacritics

表格中的名字:Ceasar,Julius将分为First_name Julius姓氏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的这个Regex tutorial(我没有使用);我想我不需要new regex,但我承认我没有阅读其所有文档)

1 个答案:

答案 0 :(得分:3)

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

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

[^\W\d_]

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