Неправильный вывод при создании чисел верхний индекс в строке Python - PullRequest
0 голосов
/ 10 января 2019

У меня есть этот код, где я пытаюсь поместить числа как верхний индекс в строку. Этот код работает, но он ставит все числа в строке как верхний индекс, тогда как я хочу, чтобы он только ставил номер только в конце строки как верхний индекс (если есть). Таким образом, в основном, если моя строка равна I want to take an apple2, тогда я хочу поставить 2 как верхний индекс, и мой код делает это правильно, но если моя строка равна I want to take 10 apples2, тогда она также будет равна 10 как верхний индекс вместе с 2, тогда как я хочу, чтобы только 2 получилось как superscipt и оставьте 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 голосов
/ 10 января 2019

Я уверен, что есть много разных способов сделать это, однако я пытаюсь разбить его на более мелкие проблемы, которые, я знаю, могут быть решены. Это был бы мой способ решения вопроса:

  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²
...