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

Posted

技术标签:

【中文标题】Python:替换字符串中多次出现的两个符号之间的所有字符【英文标题】:Python: replace all characters in between two symbols that occur multiple times in a string 【发布时间】:2021-12-14 08:27:17 【问题描述】:

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

这里是起始字符串:

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

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

网址应如下所示:

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

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

谢谢。

【问题讨论】:

会一直是DASH_1080 吗? 为什么没有正则表达式? 不,它可能是不同的分辨率。其中包括DASH_720DASH_480DASH_240DASH_ 将永远存在。 【参考方案1】:
>>> 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'

【讨论】:

【参考方案2】:

使用regular expressions 和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'

两个带括号的表达式是肯定的前瞻/后瞻断言。

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于Python:替换字符串中多次出现的两个符号之间的所有字符的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Regexp_replace 多次出现

替换出现在两个特定单词之间的一组字符串的所有出现

不止一次用正则表达式替换两个字符串之间的字符串,python

替换jquery中字符串中多次出现的多个子字符串

替换数组中的多次出现 - Swift 4.1

Oracle 正则表达式替换用逗号包围的字符串的多次出现