2015-09-19 34 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/