我有这段代码,试图将数字作为上标放在字符串中。这段代码有效,但是它会将字符串中的所有数字放在上标,而我只希望它仅将字符串的数字作为上标放在字符串的末尾(如果有的话)。因此,基本上,如果我的字符串是I want to take an apple2
,那么我想将2用作上标,而我的代码可以正确地执行此操作,但是如果我的字符串是I want to take 10 apples2
,那么它也使10与2一起成为上标,而我只希望它将2设为上标,并保持10不变。字符串的末尾也可以有n位数字,并且整数应作为上标。
我的代码是:
SUP = str.maketrans("123456789", chr(0x00b9) + chr(0x00B2) + chr(
0x00B3) + u"\u2074" + u"\u2075" + u"\u2076" + u"\u2077" + u"\u2078" + u"\u2079")
OUT_TEXT = OUT_TEXT.translate(SUP)
如何使字符串末尾的数字仅作为上标,而其他数字保持原样?
答案 0 :(得分:0)
我敢肯定有很多不同的方法可以做到这一点,但是,我试图将其分解为较小的问题,我知道可以解决。这就是我解决眼前问题的方法:
按照上述计划,我们可以创建一个函数,只需三个简单的步骤即可完成
。def convert_to_superscript(string):
# Find all words containing digits
pattern_digits_letters = re.compile(r'([a-zA-Z]\d+)')
digits_and_letters = re.findall(pattern_digits_letters, string)
# Convert any matches from the list above
SUP = str.maketrans("123456789", chr(0x00b9) + chr(0x00B2) + chr(
0x00B3) + u"\u2074" + u"\u2075" + u"\u2076" + u"\u2077" + u"\u2078" + u"\u2079")
sup_script = [i.translate(SUP) for i in digits_and_letters]
# Replace matches with superscripts
mapping = list(zip(digits_and_letters, sup_script))
for k, v in mapping:
string = string.replace(k,v)
return string
使用
进行测试OUT_TEXT = "I want to take 10 apples2"
convert_to_superscript(OUT_TEXT)
返回
I want to take 10 apples²