Python:替换字符串中出现多次的两个符号之间的所有字符

Python: replace all characters in between two symbols that occur multiple times in a string

所以我有一个用于视频文件的 URL,我可以通过一个简单的 hack 来获取需要以某种方式编辑字符串的音频文件。

这是起始字符串:

https://v.redd.it/jvjih3f894b61/DASH_1080.mp4?source=fallback

我需要将分辨率 DASH_1080 替换为 DASH_audio 我想我可以替换 DASH 之后的 _ 和之前的 . 之间的所有内容.mp4 但是 . 多次出现,所以使用 string.partition 是行不通的。

URL 应该是这样的:

https://v.redd.it/jvjih3f894b61/DASH_audio.mp4?source=fallback

我该怎么做,最好不用正则表达式,但我知道这可能是唯一的方法。

谢谢。

我的意思是..它很难看,正则表达式更好,但它可能会工作...

str = "https://v.redd.it/jvjih3f894b61/DASH_1080.mp4?source=fallback"
str_split = str.split("DASH_")
end_str = str_split[1].split(".")
str = str_split[0] + "DASH_audio." + ".".join(end_str[1:])

输出 https://v.redd.it/jvjih3f894b61/DASH_audio.mp4?source=fallback

使用regular expressions and re.sub:

s = "https://v.redd.it/jvjih3f894b61/DASH_1080.mp4?source=fallback"
re.sub(r"(?<=_).+?(?=\.)", "audio", s)
# 'https://v.redd.it/jvjih3f894b61/DASH_audio.mp4?source=fallback'

括号中的两个表达式是肯定的 lookahead/lookbehind 断言。

(?<=_).+?(?=\.)

非贪婪地匹配 "_""." 之间的任何内容 (".+?")。

>>> s = 'https://v.redd.it/jvjih3f894b61/DASH_1080.mp4?source=fallback'
>>> re.sub('DASH_\d+', 'DASH_audio', s)
'https://v.redd.it/jvjih3f894b61/DASH_audio.mp4?source=fallback'