Python正则表达式带有重音字符的奇怪行为

时间:2013-09-07 17:58:47

标签: python regex

我正在尝试一些Python(2.7.3)正则表达式,我遇到了这种我没想到的行为。在这个代码块中,当检查“ß”字符以及“Å”,“Í”等其他重音字符时,以下内容将返回False

除了为“ø”字符返回False之外,它还会返回False以及其他重音字符,例如“å”,“Å”,“ç”,“Ç”, “”等等。

案例和观点,我不确定在处理重音字符与其他字符(例如“¥”)时问题出在哪里,它没有问题。它们都有不同的unicode / utf-8值(这就是我的编码设置),所以我不确定它的区别在哪里。

def regex_check(name)
    pattern = '[^ß]'
    if re.match(pattern, str(name), re.IGNORECASE):
        return True
    else:
        return False

print regex_check("ø") 

我错过了一些明显的东西吗?谢谢您的帮助。

1 个答案:

答案 0 :(得分:3)

普通字符串是Python 2中的字节,您应该使用u'...'前缀将它们视为unicode字符串。

# -*- coding: utf-8 -*-
import re
def regex_check(name):
    pattern = u'[^ß]'    #use u'...' here  
    if re.match(pattern, name , re.IGNORECASE):
        return True
    else:
        return False

print regex_check(u"ø")  #use u'...' here

<强>输出:

True