【发布时间】:2015-09-19 08:05:50
【问题描述】:
我喜欢在字符串中的任何数字序列周围添加 [],例如
"pixel1blue pin10off output2high foo9182bar"
应该转换为
"pixel[1]blue pin[10]off output[2]high foo[9182]bar"
我觉得一定有一个简单的方法,但它让我无法理解:(
【问题讨论】:
标签: python regex python-2.7
我喜欢在字符串中的任何数字序列周围添加 [],例如
"pixel1blue pin10off output2high foo9182bar"
应该转换为
"pixel[1]blue pin[10]off output[2]high foo[9182]bar"
我觉得一定有一个简单的方法,但它让我无法理解:(
【问题讨论】:
标签: python regex python-2.7
是的,有一个简单的方法,使用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'
【讨论】:
\d+ 匹配尽可能多的数字;这称为 greedy 匹配。如果您使用\d+?,它将尽可能少地匹配,或非贪婪匹配。
{1,} 与使用+ 的效果相同。
你可以使用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/
【讨论】: