如何用字符串中最后找到的数字分割字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用字符串中最后找到的数字分割字符串?相关的知识,希望对你有一定的参考价值。

我是重新使用python模块的人。我正在尝试在最后找到的数字中分割字符串。

Given string:
![](images/folder0/subfolder1/file0.png)
                                  ^ last found number = 0


I would like to split the string in three parts:  

part1: ![](images/folder0/subfolder1/file
part2: 0
part3: .png)

我的尝试:

我可以找到这些拆分:

lst = re.split(r'(d+)', query)
# ['![](images/folder', '0', '/subfolder', '1', '/file', '0', '.png)']

但是,我不确定如何分成三部分。

感谢您的帮助。

答案

这是您的第一个未编辑问题的解决方案:

import sys, re

query = "![](images/folder0/subfolder1/file0.png)"

query = re.sub("(d+)(?!.*d+.*)", str(int(re.search("(d+)(?!.*d+.*)",query).group()) + 1),query)
print(query)
另一答案

使用否定的前瞻:

[(?!.*d)确保后面没有数字。

query = '![](images/folder0/subfolder1/file0.png)'
lst = re.split(r'(d+)(?!.*d)', query)
print lst

输出:

['![](images/folder0/subfolder1/file', '0', '.png)']
另一答案

您可以使用(S+)(d+)(.S+)

s = "![](images/folder0/subfolder1/file10.png)"
matched = re.findall(r'(S+)(d+)(.S+)', s)

# output
[('![](images/folder0/subfolder1/file1', '0', '.png)')]
另一答案

替代方式:

import sys, re

query = "![](images/folder0/subfolder1/file0.png)"
m = re.match(r'(.+)(d+)(.+)', query)

lst = m.groups()
print(lst)

给予:

('![](images/folder0/subfolder1/file', '0', '.png)')

更新积分:@Toto

上述正则表达式模式仅在最后一个数字为一位数字时有效。(try at regex101)。

![](images/folder0/subfolder1/file20.png)
wrong answer ==> ('![](images/folder0/subfolder1/file2', '0', '.png)')

要解决此问题,请使用负面观察:

query = '![](images/folder0/subfolder1/file20.png)'
lst = re.split(r'(d+)(?!.*d)', query)

right answer ==> ('![](images/folder0/subfolder1/file', '20', '.png)')
另一答案

这样的东西?如果查询中的“文件” +编号一致:

import sys, re
query = "![](images/folder0/subfolder1/file10.png)"
num = re.findall('d+',query)[-1] # gives last number 0

newnum = int(num)+1
query = query.replace(r'file'+num, 'file'+str(newnum))
print(query)
另一答案

拥有使用正则表达式吗?我没有使用正则表达式就写下来了:

s = '![](images/folder0/subfolder1/file0.png)'

s1 = s.split('/')
s2 = s1[len(s1)-1].split('.')
s3 = s2[0][0:4] + str(int(s2[0][4:])+1) + '.' + s2[1]
new_filelist = []
for i in s1[0:len(s1)-1]:
    append_str = i + '/'
    new_filelist.append(append_str)
new_filelist.append(s3)
new_filename = ''.join(i for i in new_filelist)

只要字符串始终以'fileXX.png'结尾,它将在最后一位数字上加1

以上是关于如何用字符串中最后找到的数字分割字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何用shell提取文件中指定的字符串

Python - 如何用非字母字符分割字符串

如何用星号分割值并使用正则表达式获取第一个数字[关闭]

如何用逗号分割字符串而不在perl的引号内包含逗号?

如何用c语言从一组给定数中找到一个数或者几个数的和使其值最接近指定的数

批处理如何用正则提取字符串中间的数字,和结尾的数字