【发布时间】:2015-12-28 15:24:45
【问题描述】:
我有这个脚本来测试正则表达式以及 unicode 的行为方式:
# -*- coding: utf-8 -*-
import re
p = "Solo voy si se sucedierón o se suceden mañana los siguienñes eventos:"
w = re.findall('[a-zA-ZÑñ]+',p.decode('utf-8'), re.UNICODE)
print(w)
print 声明显示了这一点:
[u'Solo', u'voy', u'si', u'se', u'sucedier', u'n', u'o', u'se', u'suceden', u'ma', u'ana', u'los', u'siguien', u'es', u'eventos']
"sucedierón" 被转换为"u'sucedier', u'n'",同样"mañana" 变成"u'ma', u'ana'"。
我尝试过解码,将'\xc3\xb1a' 添加到'Ñ' 的正则表达式中
后来在阅读了一些文档后,我意识到使用 [a-zA-Z] 只匹配 ASCII 字符。这就是为什么我必须更改为 r'\b\w+\b' 以便我可以在正则表达式中添加标志
w = re.findall(r'\b\w+\b', p, re.UNICODE)
但这没有用。
我也试过先decode(),然后再findall():
p = "Solo voy si se sucedierón o se suceden mañana los siguienñes eventos:"
U = p.decode('utf8')
如果我打印变量U
"Solo voy si se sucedierón o se suceden mañana los siguienñes eventos:"
我看到输出符合预期,但是当我再次使用findall() 时:
[u'Solo', u'voy', u'si', u'se', u'sucedier\xf3n', u'o', u'se', u'suceden', u'ma\xf1ana', u'los', u'siguien\xf1es', u'eventos']
现在单词已完成,但 ó 被替换为 \xf3n,ñ 被替换为 \xf1,unicode 值。
我怎样才能findall() 获取非ASCII 字符"ñ","á", "é", "í", "ó", "ú"
我现在在 SO 中有很多这样的问题,相信我我读了很多,但我就是找不到缺失的部分。
编辑
我正在使用 python 2.7
编辑 2 其他人可以尝试@LetzerWille 的建议吗?不适合我
【问题讨论】: