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

标签 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("ø") 

我是否遗漏了一些明显的东西?谢谢您的帮助。

最佳答案

普通字符串在 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

关于Python 正则表达式带有重音字符的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18676268/

相关文章:

python - 如何让我的程序随机列出列表中的每个项目并且只列出一次

python - Django 支付处理的良好解决方案

python - 使用正则表达式解析大文本文件

MySQL:正则表达式匹配单词的变体,但不是一种变体?

python - 如何从 Python 中的不同类访问使用一个类创建的对象

javascript - Google Apps 脚本 - TypeError : Cannot read property "1" from null

regex - grep正则表达式如何删除单引号

java - 如何在Android中使用正则表达式替换两个标志之间的内容?

java - 正则表达式 - 不要选择双引号内的评论

python - Instagram端点:/tags/tag-name/media/recent的参数到底是什么