我有一个这样的字符串:用括号号替换数在字符串的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次(但它不能处理数字后面跟着字母)。
我有一个这样的字符串:用括号号替换数在字符串的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次(但它不能处理数字后面跟着字母)。
下面是使用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'
谢谢。只是一个查询:在替换时,你可以用大写形式('K [0] + K [1] + K [1] K [2] + K [2] + K [3] + 1 + 12) ')? –
您可以使用lambda来转换匹配的字母。用一个选项更新了答案。 – Psidom
这个怎么样?
s = re.sub('([a-z]+)([0-9]+)', r"\1" + '[' + r"\2" + ']', s)
您可能必须通过char解析字符串char或使用正则表达式。 – ForceBru
@ForceBru正则表达式是确保最好的方法 –