我有一個這樣的字符串:用括號號替換數在字符串的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正則表達式是確保最好的方法 –