尝试编写一个python正则表达式来验证由
我的测试字符串:
9 Melodía.de_la-montaña
9 Melodía.de_la-montaña
或作为使用ascii()
生成的字符串文本:
它们看起来完全相同,但不是这样,一个是规范化的,另一个使用组合字符进行屈折。在
这是我的第一次尝试:
import re
reg = re.compile("^[\w\.\- ]+$", re.IGNORECASE)
re.search(reg, str1) # None
re.search(reg, str2) # None
如果我删除位置限定符并使用findall
而不是search
,我会得到这样的列表['9 Melodi', 'a.de_la-montan', 'a']
或{
我甚至尝试过re.compile("^[\w\.\- ]+$", re.IGNORECASE | re.UNICODE)
,但在python3中这应该是不必要的,对吧?在
在寻找答案的过程中,我发现了this question和this one和{a3}和{a4},但它们都很旧,处理python2,似乎表明我编写的regex应该工作。python3.5regex文档提到\w
应该匹配unicode,但是没有提供涉及非ASCII文本的实际示例。在
如何匹配所需的字符串?在
您的第一个示例
str1
匹配得很好;\w
包括所有Unicode单词字符,包括带重音符号的拉丁字符。在可以使用^{} 将字符串规范化为组合形式,使用
NFC
形式:注意,
re.IGNORECASE
标志不需要,\w
不关心大小写。在相关问题 更多 >
编程相关推荐