重音字符问题

5

我在Python正则表达式的重音问题上遇到了问题,我正在尝试以下内容:

import re
ER = re.compile(r'\w', re.L)
print(ER.sub('.','Maçã'))

..çã

即使使用re.compile并将区域设置作为参数传递,重音符号仍然无法被识别。 有人遇到过这个问题吗? 谢谢!

2
也许有懂巴西语的人可以将这篇帖子翻译成英语? - Sven Marnach
3个回答

4

使用re.U Unicode标志更为适合。

如果使用Python 2.x,您还需要将字符串指定为Unicode格式,即

print(ER.sub('.', u'Maçã'))

对我来说,这只适用于Python3 - 在2.7上,我会得到“...�.�” - Kimvais
1
@Kimvais:在Python 2中,您可能还需要将其标记为Unicode字符串:u'Maçã' - Thomas K
我尝试以这种方式使用 re.U,但是它没有起作用。我遇到了同样的问题。我尝试获取我的默认位置:locale.getdefaultlocale(),它返回 >> ('pt_BR', 'UTF8')。 - Michel Andrade
@Kimvais:看起来你需要在字符串前加上“u”。 - SilentGhost
@Michel:你的代码中使用了 u'Maçã' 吗? - SilentGhost
我之前一直在使用,但是遇到了问题,所以我用这种方式解决了:unicode('Maça', 'utf-8')。谢谢! - Michel Andrade

4

来自 http://www.regular-expressions.info/python.html

默认情况下,Python的正则表达式引擎只将字母A到Z、数字0到9和下划线视为“单词字符”。指定标志re.L或re.LOCALE可使\w匹配所有当前区域设置中被视为字母的字符。或者,您可以指定re.U或re.UNICODE以将所有脚本的所有字母视为单词字符。该设置还会影响单词边界。

尝试使用re.UNICODE。


0

我明白问题所在了!我之前试图在shell中使用这段代码,所以需要按照以下方式使用:

import re ER = re.compile(r'\w', re.L) ER.sub('.', unicode('Maça','utf-8'))

非常感谢!!! :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接