我喜歡在一個字符串如增加[]周圍的任意序列添加[]圍繞數字字符串中
"pixel1blue pin10off output2high foo9182bar"
應該轉換爲
"pixel[1]blue pin[10]off output[2]high foo[9182]bar"
我覺得必須有一個簡單的方法但它躲避我:(
我喜歡在一個字符串如增加[]周圍的任意序列添加[]圍繞數字字符串中
"pixel1blue pin10off output2high foo9182bar"
應該轉換爲
"pixel[1]blue pin[10]off output[2]high foo[9182]bar"
我覺得必須有一個簡單的方法但它躲避我:(
是的,有一個簡單的方法,使用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'
您可以使用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/
很大,但爲什麼這不會產生」 ......引腳[1] [0]關富...... [9] [1] [8] [2 ]酒吧」? – SimpleSi
@SimpleSi:因爲'\ d +'儘可能匹配儘可能多的數字;這被稱爲*貪婪*匹配。如果你使用'\ d +?',它會匹配儘可能少,或*非貪婪*匹配。 –
@SimpleSi:參見http://www.regular-expressions.info/repeat.html –