python - 为字符串中的所有数字添加下标格式

标签 python python-3.x string subscript

我正在尝试编写一个简单的脚本,该脚本迭代输入字符串并将字符串中的所有数字转换为带下标的数字。

这是我最新的尝试,它迭代输入字符串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/

相关文章:

python - 如何使用点绘制 Pandas 数据框的两列

python - Pyzbar 不适用于 Ubuntu

Python:使用 ascii 码打印

python - 如何通过运行单元测试引用我的设置文件?

java - 逐步复制字符串中的字符

python - Django 无法在 DATABASES 'default' 为空时运行测试

Python,过滤对象列表,但返回特定属性?

python-3.x - 在 Debian8 64b 上为 Python3.9 编译 SSL 模块时出错

java - 对可能包含数字的字符串进行排序

Golang 中的字符串解码