Nac*_*uel 8 python regex unicode
我有这个脚本来测试正则表达式以及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)
Run Code Online (Sandbox Code Playgroud)
而且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']
Run Code Online (Sandbox Code Playgroud)
"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)
Run Code Online (Sandbox Code Playgroud)
但这没效果.
我也试过decode()第一次和findall()后来:
p = "Solo voy si se sucedierón o se suceden mañana los siguienñes eventos:"
U = p.decode('utf8')
Run Code Online (Sandbox Code Playgroud)
如果我打印变量 U
"Solo voy si se sucedierón o se suceden mañana los siguienñes eventos:"
Run Code Online (Sandbox Code Playgroud)
我看到输出是预期的,但是当我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']
Run Code Online (Sandbox Code Playgroud)
现在,这个词是完整的,但ó被替换\xf3n和ñ替换\xf1,Unicode值.
我怎样才能findall()获得非ASCII字符"ñ","á", "é", "í", "ó", "ú"
我现在有很多这样的问题,相信我,我读了很多,但我找不到丢失的部分.
编辑
我正在使用python 2.7
编辑2 其他人可以试试@LetzerWille建议的吗?不适合我
该re.UNICODE标志允许您使用带有变音符号(重音符号和波形符)的单词字符\\w和单词边界\\b。这对于匹配不同语言的单词非常有用。
代码:
\n\n# -*- coding: utf-8 -*-\n# http://stackoverflow.com/q/32872917/5290909\n#python 2.7.9\n\nimport re\n\ntext = "Solo voy si se sucedier\xc3\xb3n o se suceden ma\xc3\xb1ana los siguien\xc3\xb1es eventos:"\n# Decode to unicode\nunicode_text = text.decode(\'utf8\')\n\nmatches = re.findall(ur\'\\b\\w+\\b\', unicode_text, re.UNICODE)\n\n# Encode back again to UTF-8\nutf8_matches = [ match.encode(\'utf-8\') for match in matches ]\n\n# Print every word\nfor utf8_word in utf8_matches:\n print utf8_word\nRun Code Online (Sandbox Code Playgroud)\n\n\n
| 归档时间: |
|
| 查看次数: |
3181 次 |
| 最近记录: |