对于国际化项目,我必须使用Python验证名称(第一个,最后一个)的全局语法.但缺乏unicode类支持确实使事情变得更加困难.
有没有正则表达式/库可以做到这一点?
例子:
必须接受Björn,Anne-Charlotte,توماس,毛或מיק.-Björn,安妮 - 夏洛特,汤姆或这样的条目应该被拒绝.
有没有简单的方法呢?
谢谢.
Mar*_*ers 12
如果指定re.UNICODE标志,Python确实支持正则表达式中的unicode .你可以使用这样的东西:
r'^[^\W_]+(-[^\W_]+)?$'
Run Code Online (Sandbox Code Playgroud)
测试代码:
# -*- coding: utf-8 -*-
import re
names = [
u'Björn',
u'Anne-Charlotte',
u'?????',
u'?',
u'???',
u'-Björn',
u'Anne--Charlotte',
u'Tom_',
]
for name in names:
regex = re.compile(r'^[^\W_]+(-[^\W_]+)?$', re.U)
print u'{0:20} {1}'.format(name, regex.match(name) is not None)
Run Code Online (Sandbox Code Playgroud)
结果:
Björn True Anne-Charlotte True ????? True ? True ??? True -Björn False Anne--Charlotte False Tom_ False
如果您还想禁止名称中的数字,请在两个位置更改[^\W_]为[^\W\d_].