python3正则表达式,带音调符号和连字,

2024-05-23 17:59:09 发布

您现在位置:Python中文网/ 问答频道 /正文

姓名形式:凯撒,朱利叶斯分为第一个名字朱利叶斯姓凯撒。在

名字可以包含变音符号(áé..)和连字(æ,ø)

这段代码在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。好像([A-Z][A-Z]+),将匹配重音符号和组合字符。在

这可能吗?在

(到目前为止,我看到的是: Dive into python 3 on UTF-8 vs Unicode;这是基于Unicode的Regex tutorial(我没有使用);我想我不需要new regex,但我承认我没有阅读它的所有文档)


Tags: or方法reformatforgroup数字名字
1条回答
网友
1楼 · 发布于 2024-05-23 17:59:09

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

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

[^\W\d_]

匹配任何Unicode字母。这个字符类匹配任何“非字母数字字符”(与“字母数字字符”相同)且不是数字或下划线的任何内容。在

相关问题 更多 >