Python字符串:如何仅替换一些数字?

时间:2019-04-01 17:23:38

标签: python regex

我正在使用re模块练习一些正则表达式。我想知道如何 我们可以只更改字符串中的一些数字吗?

a1 = 'images1/b100.png'

# required:
a2 = 'images2/b100.png'

我的尝试

import re
a1 = 'images1/b100.png'
nums = list(map(int, re.findall(r'\d+', a1)))
num0 = nums[0]
a2 = a1.replace(str(num0), str(num0+1))

5 个答案:

答案 0 :(得分:2)

您可以提供一个参数以仅替换第一次出现的情况。

更改:

a2 = a1.replace(str(num0), str(num0+1))

收件人:

a2 = a1.replace(str(num0), str(num0+1), 1)

如此处所述:https://docs.python.org/3/library/stdtypes.html

  

str.replace(old,new [,count])

     

返回该字符串的副本,其中所有出现的子字符串old都被new替换。如果指定了可选的参数count,则仅替换第一个出现的计数。

答案 1 :(得分:1)

您可以输入:

a2 = a1.replace(str(num0), str(num0+1), 1)

答案 2 :(得分:1)

下面是答案,

a2.replace("b200","100")

结果: 'images2 / 100.png'

如有任何疑问,请告诉我。

答案 3 :(得分:0)

为什么不使用re.sub

import re
a1 = 'images1/b100.png'
re.sub(r"images1/b(\d+).png", r"images2/\1.png", a1) # => 'images2/100.png'

答案 4 :(得分:0)

import re
a1 = 'images1/b100.png'
matches = re.match( r'^(.*)(\d+)(\/.*)$', a1)
a2 = matches.group(1)+str(int(matches.group(2))+1)+matches.group(3)

^(.*)(\d+)(\/.*)$:以数字和任何文件名结尾的路径。