2015-09-19 37 views
-1

我喜歡在一個字符串如增加[]周圍的任意序列添加[]圍繞數字字符串中

"pixel1blue pin10off output2high foo9182bar" 

應該轉換爲

"pixel[1]blue pin[10]off output[2]high foo[9182]bar" 

我覺得必須有一個簡單的方法但它躲避我:(

回答

5

是的,有一個簡單的方法,使用re.sub()

result = re.sub(r'(\d+)', r'[\1]', inputstring) 

這裏\d匹配一個數字,\d+匹配一個或多個數字。圍繞該模式的(...)對匹配進行分組,因此我們可以在第二個參數即替換模式中引用它。該模式簡單地用羣組中的[...]取代匹配的數字。

請注意,我使用r'..'原始字符串文字;如果你不這樣做,你必須加倍所有的\反斜槓;請參閱Python Regex HOWTO的Backslash Plague section

演示:

>>> import re 
>>> inputstring = "pixel1blue pin10off output2high foo9182bar" 
>>> re.sub(r'(\d+)', r'[\1]', inputstring) 
'pixel[1]blue pin[10]off output[2]high foo[9182]bar' 
+0

很大,但爲什麼這不會產生」 ......引腳[1] [0]關富...... [9] [1] [8] [2 ]酒吧」? – SimpleSi

+0

@SimpleSi:因爲'\ d +'儘可能匹配儘可能多的數字;這被稱爲*貪婪*匹配。如果你使用'\ d +?',它會匹配儘可能少,或*非貪婪*匹配。 –

+0

@SimpleSi:參見http://www.regular-expressions.info/repeat.html –

2

您可以使用re.sub

>>> s="pixel1blue pin10off output2high foo9182bar" 
>>> import re 
>>> re.sub(r'(\d+)',r'[\1]',s) 
'pixel[1]blue pin[10]off output[2]high foo[9182]bar 

這裏(\d+)將匹配的數字和re.sub功能任意組合將與括號內r'[\1]'第一組比賽取代它。

你可以從這裏開始學習正則表達式http://www.regular-expressions.info/