[英]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.