我怎么能转过来#11; 11 12 13 14"至" 12 13 14 15"通过在python中使用re.sub

时间:2016-06-24 07:47:25

标签: python regex python-2.7

使用以下方法将11 12 13 14转换为11a 12a 13a 14a很容易:

myStr = "11 12 13 14"
myStr = re.sub(r'(\d*)', r'\1a', myStr)
print myStr # 11a 12a 13a 14a

但如何使用11 12 13 1412 13 14 15变为re.sub

2 个答案:

答案 0 :(得分:5)

re.sub()的正则表达式解决方案:

import re
string = "11 12 13 14"

def repl(m):
    number = int(m.group(1)) + 1
    return str(number)

print re.sub(r'\b(\d+)\b', repl, string)
# 12 13 14 15

a demo on ideone.com

正如其他人所说,这可能不是最合适的解决方案。

答案 1 :(得分:2)

对于只包含用空格分隔的整数的字符串,最简单的方法是

s = "11 12 13 14"
print(" ".join([str(int(x)+1) for x in s.split()]))
# => 12 13 14 15

请参阅IDEONE demo

re.sub的替代方案可以在\d+正则表达式模式和替换部分中的lambda的帮助下使用:

import re
s = "11 12 13 14"
res = re.sub(r'\d+', lambda x: str(int(x.group()) + 1), s)
print(res) # => 12 13 14 15

Another IDEONE demo

正则表达式方法的优点是:

  • 您可以在包含单词,标点符号等的较大文本中增加数字
  • 您可以在特定上下文中添加/进一步精确模式以增加数字(例如,仅使用$后跟\d+(?=\$)的增量数字或不属于使用(?<!\d\.)\b\d+\b(?!\.\d)
  • 浮动值