在使用python字符串创建上标数字时输出错误

时间:2019-01-10 14:22:58

标签: python string superscript

我有这段代码,试图将数字作为上标放在字符串中。这段代码有效,但是它会将字符串中的所有数字放在上标,而我只希望它仅将字符串的数字作为上标放在字符串的末尾(如果有的话)。因此,基本上,如果我的字符串是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)

如何使字符串末尾的数字仅作为上标,而其他数字保持原样?

1 个答案:

答案 0 :(得分:0)

我敢肯定有很多不同的方法可以做到这一点,但是,我试图将其分解为较小的问题,我知道可以解决。这就是我解决眼前问题的方法:

  1. 查找同时包含字符和数字的单词
  2. 将找到的单词转换为上标
  3. 用转换替换找到的单词

按照上述计划,我们可以创建一个函数,只需三个简单的步骤即可完成

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²