![](/img/trans.png)
[英]Trying to get the last occurrence of a substring in string using recursion in python
[英]How to get String Before Last occurrence of substring?
我想在给定子字符串的最后一次出现之前获取String。
我的弦是
路径= D:/me/vol101/Prod/cent/2019_04_23_01/image/AVEN_000_3400_img_pic_p1001-1010/pxy/AVEN_000_3400_img-mp4_to_MOV_v1001-1010.mov
我的子字符串1001-1010
将会出现两次。 我想要的只是在最后一次出现之前获取字符串。
注意:我的子字符串是动态的,具有不同的填充,但只有数字。
我想要,
d:/我/ vol101 /生产/分/ 2019_04_23_01 /图像/ AVEN_000_3400_img_pic_p1001-1010 / PXY / AVEN_000_3400_img-mp4_to_MOV_v
我已经使用了正则表达式和切片,
>>> p = 'D:/me/vol101/Prod/cent/2019_04_23_01/image/AVEN_000_3400_img_pic_p1001-1010/pxy/AVEN_000_3400_img-mp4_to_MOV_v1001-1010.mov'
>>> q = re.findall("\d*-\d*",p)
>>> q[-1].join(p.split(q[-1])[:-1])
'D:/me/vol101/Prod/cent/2019_04_23_01/image/AVEN_000_3400_img_pic_p1001-1010/pxy/AVEN_000_3400_img-mp4_to_MOV_v'
>>>
仅使用正则表达式,还有更好的方法吗?
请注意,我尝试了很多,例如:
我通过切片使用正则表达式得到了答案,但我想单独使用正则表达式来实现。
为什么使用regex
。 只需使用内置的字符串方法:
path = "D:/me/vol101/Prod/cent/2019_04_23_01/image/AVEN_000_3400_img_pic_p1001-1010/pxy/AVEN_000_3400_img-mp4_to_MOV_v1001-1010.mov"
index = path.rfind("1001-1010")
print(path[:index])
您可以使用简单的贪婪匹配和捕获组:
(.*)1001-1010
您的比赛在捕获组#1中
由于.*
本质上是贪婪的,因此在匹配关键字1001-1010
之前,它将匹配最长匹配项 。
根据下面的注释,如果关键字不是静态字符串,则可以使用此正则表达式:
r'(.*\D)\d+-\d+'
Python代码:
>>> p = 'D:/me/vol101/Prod/cent/2019_04_23_01/image/AVEN_000_3400_img_pic_p1001-1010/pxy/AVEN_000_3400_img-mp4_to_MOV_v1001-1010.mov'
>>> print (re.findall(r'(.*\D)\d+-\d+', p))
['D:/me/vol101/Prod/cent/2019_04_23_01/image/AVEN_000_3400_img_pic_p1001-1010/pxy/AVEN_000_3400_img-mp4_to_MOV_v']
谢谢@anubhava,
我的第一个正则表达式是
.*(\d*-\d*)\/
现在我更正了我的..
.*(\d*-\d*)
要么
(.*)(\d*-\d*)
这给了我
>>> q = re.search('.+(\d*-\d*)', p)
>>> q.group()
'D:/me/vol101/Prod/cent/2019_04_23_01/image/AVEN_000_3400_img_pic_p1001-1010/pxy/AVEN_000_3400_img-mp4_to_MOV_v0001-1001'
>>>
(.*\D)\d+-\d+
这给了我我想要的...
>>> q = re.search('(.*\D)\d+-\d+', p)
>>> q.groups()
('D:/me/vol101/Prod/cent/2019_04_23_01/image/AVEN_000_3400_img_pic_p1001-1010/pxy/AVEN_000_3400_img-mp4_to_MOV_v',)
>>>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.