我正在尝试编写一个简单的脚本,该脚本迭代输入字符串并将字符串中的所有数字转换为带下标的数字。
这是我最新的尝试,它迭代输入字符串item
,并应创建一个包含下标数字的新字符串来代替原始字符串中的数字。也许这是不可能的,但我似乎无法结合 Unicode 和格式字符串文字表达式来完成这项工作。
item= 'H2O'
new=[]
sub = u'\u208'
for i,x in enumerate(item):
if x.isdigit():
sub=u'{x}'.format(sub)
new.append(sub)
else:
new.append(x)
new=''.join(new)
new
我收到以下错误:
File "<ipython-input-48-1d7d4a7394db>", line 4
sub = u'\u208'
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-4: truncated \uXXXX escape
最后,我想进行以下“转换”以获得输入字符串(H2O
)的“数字下标”版本(H2O
) ):
H2O --> H₂O
对我做错了什么或者是否有更好的方法有什么想法吗? 谢谢!
最佳答案
您可以使用str.maketrans()
。
u'\u2080'
到u'\u2089'
代表0到9的数字
sub=str.maketrans("0123456789", "₀₁₂₃₄₅₆₇₈₉")
_str='C3H8O3'
_str=_str.translate(sub)
print(_str)
输出
'C₃H₈O₃'
在您的代码中,sub=u'\u208'
应为 sub=u'\u2082'
。简单的替换就足够了。
_str='H2O'
sub=u'\u2082'
for char in _str:
if char.isdigit():
_str=_str.replace(char,sub)
print(_str)
'H₂O'
将普通值构建到下标值字典。
sub=u'\u2080'
norm_to_sub={}
for norm in '0123456789':
norm_to_sub[norm]=sub
sub=chr(ord(sub)+1)
print(norm_to_sub)
{'0': '₀', '1': '₁', '2': '₂', '3': '₃', '4': '₄', '5': '₅', '6': '₆', '7': '₇', '8': '₈', '9': '₉'}
按照 wjandrea 的建议,您可以执行此操作。
sub = 0x2080
norm_to_sub={}
for norm in range(10):
norm_to_sub[norm] = ord(sub + norm)
{'0': '₀', '1': '₁', '2': '₂', '3': '₃', '4': '₄', '5': '₅', '6': '₆', '7': '₇', '8': '₈', '9': '₉'}
您甚至可以创建一个函数。
def change_to_sub(number):
sub=0x2080
return ''.join(chr(sub+int(num)) for num in str(number))
print(change_to_sub(1232454353654))
'₁₂₃₂₄₅₄₃₅₃₆₅₄'
关于python - 为字符串中的所有数字添加下标格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59953446/