Que*_*iek 12 python regex utf-8
我从文件中获取数据:
words = re.findall(r'[\w]+',self._from.encode('utf8'),re.U)
Run Code Online (Sandbox Code Playgroud)
如果文件包含:
你好你好吗?
那么结果将是:
['你好你好吗']
但如果文件包含俄语(即西里尔符号),则:
Привет,какдела?
在这种情况下,结果是:
['\ xd0','\ xd1','\ xd0','\ xd0\xb2\xd0\xb5\xd1','\ xd0\xba\xd0','\ xd0\xba','\ xd0', '\ xd0\xb5\xd0','\ xd0']
为什么?跆拳道?我已添加:
sys.setdefaultencoding('utf-8')
Run Code Online (Sandbox Code Playgroud)
我正在使用python2.7和linux ubuntu.
words = re.findall(r'[\w]+',self._from.decode('utf8'),re.U)
print u" ".join(words)
Run Code Online (Sandbox Code Playgroud)
unu*_*tbu 10
要使用\w+匹配的字母数字的Unicode字符,你应该通过双方一个unicode图案和unicode文字re.findall.
在Python2中:
假设您正在从文件中读取字节(而不是文本),您应该解码字节以获得unicode:
uni = '??????, ??? ?????'.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
ur'(?u)\w+'是一个原始的unicode文字.即使这里没有必要,使用原始unicode /字符串文字来表示正则表达式模式通常也是一种很好的做法 - 它允许你在某些字符之前避免使用双反斜杠\s.
正则表达式模式ur'(?u)\w+' 烘烤,以Unicode标志告诉re.findall,使\w依赖于Unicode字符属性数据库.
import re
uni = '??????, ??? ?????'.decode('utf-8')
print(re.findall(ur'(?u)\w+', uni))
Run Code Online (Sandbox Code Playgroud)
产生一个包含3个unicode"单词"的列表:
[u'\u041f\u0440\u0438\u0432\u0435\u0442',
u'\u043a\u0430\u043a',
u'\u0434\u0435\u043b\u0430']
Run Code Online (Sandbox Code Playgroud)在Python3中:
总的原则是一样的,不同之处在于什么是unicodeS IN Python2现在strS IN Python3,并且不再有在两者之间自动转换的任何企图.因此,再次假设您正在从文件中读取字节(而不是文本),您应该解码字节以获取a str,并使用str正则表达式模式:
import re
uni = b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82, \xd0\xba\xd0\xb0\xd0\xba \xd0\xb4\xd0\xb5\xd0\xbb\xd0\xb0?'.decode('utf')
print(re.findall(r'(?u)\w+', uni))
Run Code Online (Sandbox Code Playgroud)
产量
['??????', '???', '????']
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
8756 次 |
| 最近记录: |