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