2017-01-21 74 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解析字符串char或使用正则表达式。 – ForceBru

+0

@ForceBru正则表达式是确保最好的方法 –

回答

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' 

以取代大写字母相匹配,你可以使用lambda在更换位置,将它们转换为大写:

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

您可以使用lambda来转换匹配的字母。用一个选项更新了答案。 – Psidom

2

这个怎么样?

s = re.sub('([a-z]+)([0-9]+)', r"\1" + '[' + r"\2" + ']', s)