2017-01-21 109 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)