![](/img/trans.png)
[英]Python: How can I replace full-width characters with half-width characters?
[英]Convert full-width Unicode characters into ASCII characters
我在Unicode中有一些字符串文本,其中包含一些数字,如下所示:
txt = '36fsdfdsf14'
但是, int(txt[:2])
不能将字符识别为数字。 如何更改字符以使其识别为数字?
如果您实际上具有Unicode(或将字节字符串解码为Unicode),则可以使用规范的替换规范化数据:
>>> s = u'36fsdfdsf14'
>>> s
u'\uff13\uff16fsdfdsf\uff11\uff14'
>>> import unicodedata as ud
>>> ud.normalize('NFKC',s)
u'36fsdfdsf14'
如果规范化规范化对您来说变化太大,则可以制作仅包含所需替换项的转换表:
#coding:utf8
repl = u'0123456789'
# Fullwidth digits are U+FF10 to U+FF19.
# This makes a lookup table from Unicode ordinal to the ASCII character equivalent.
xlat = dict(zip(range(0xff10,0xff1a),repl))
s = u'36fsdfdsf14'
print(s.translate(xlat))
输出:
36fsdfdsf14
在python 3上
[int(x) for x in re.findall(r'\d+', '36fsdfdsf14')]
# [36, 14]
在python 2上
[int(x) for x in re.findall(r'\d+', u'36fsdfdsf14', re.U)]
# [36, 14]
关于python 2示例,请注意string和re.U
标志前面的'u'。 您可以将问题中现有的str
类型变量(例如txt
转换为unicode,即txt.decode('utf8')
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.