2017-01-21 3 views
4

У меня есть строка, как это:Заменить число в строке с помощью скобки числа Python

s = k0+k1+k1k2+k2k3+1+12 

Я хочу, чтобы преобразовать это, таким образом, что каждое число, которое следует букве (k здесь) окружается квадратными скобками :

k[0]+k[1]+k[1]k[2]+k[2]k[3]+1+12 

Что такое хороший способ сделать это?

Что я пытался: Используйте replace() функцию 4 раза (но она не может обрабатывать числа, за которыми не следует буквы).

+0

Возможно, вам придется проанализировать строковый символ char или использовать регулярное выражение. – ForceBru

+0

@ForceBru regex - лучший способ пойти точно –

ответ

5

Вот один вариант использование re модуля с регулярным выражением ([a-zA-Z])(\d+), который соответствует одной букве следует цифры и sub, вы можете заключить совпавшие цифры с парой скобок в замене:

import re 
s = "k0+k1+k1k2+k2k3+1+12" 

re.sub(r"([a-zA-Z])(\d+)", r"\1[\2]", s) 
# 'k[0]+k[1]+k[1]k[2]+k[2]k[3]+1+12' 

чтобы заменить совпавшие буквы с заглавными буквами, вы можете использовать лямбда в позиции замены, чтобы преобразовать их в верхний регистр:

re.sub(r"([a-zA-Z])(\d+)", lambda p: "%s[%s]" % (p.groups(0)[0].upper(), p.groups(0)[1]), s) 

# 'K[0]+K[1]+K[1]K[2]+K[2]K[3]+1+12' 
+0

Спасибо. Только один запрос: при подстановке вы можете сделать предыдущее письмо в капитальном случае ('K [0] + K [1] + K [1] K [2] + K [2] + K [3] + 1 + 12 ')? –

+1

Вы можете использовать лямбда для преобразования совпадающих букв. Обновлен ответ с возможностью сделать это. – Psidom

2

Как насчет этого?

s = re.sub('([a-z]+)([0-9]+)', r"\1" + '[' + r"\2" + ']', s) 
Смежные вопросы