Немного фиксированное регулярное выражение будет выглядеть как
(.*)\[([^]]*YouTube)]\(https://www\.youtube\.com/watch\?\S*v=([^&]*)[^)]*\)\{[ ]*([0-9]*)[^,]*:[ ]*([0-9]*)[^,]*[,]?[ ]?([0-9]?)[^,]?:[ ]*([0-9]*)[^,]*}
См. Демонстрационную версию регулярное выражение , чтобы увидеть структуру соответствия.Поскольку вы не задаете спецификации регулярных выражений, достаточно решить текущую проблему: вычисления с содержимым группы невозможны в шаблоне замены строк.Вам необходимо использовать метод обратного вызова в качестве аргумента замены:
import re
Output = "- [Michael - YouTube](https://www.youtube.com/watch?v=3nsoN-LS8RQ){1:00,1:03}"
Pattern = "(.*)\[([^]]*YouTube)]\(https://www\.youtube\.com/watch\?\S*v=([^&]*)[^)]*\)\{[ ]*([0-9]*)[^,]*:[ ]*([0-9]*)[^,]*[,]?[ ]?([0-9]?)[^,]?:[ ]*([0-9]*)[^,]*}"
def ReplaceMatch(m):
tStart = int(float((m.group(4))))*60 + int(float(m.group(5)))
tEnd = int(float(m.group(6)))*60 + int(float(m.group(7)))
return '{0}[{1}; **Start:{3}m {4}s End:{5}m {6}s**](https://www.youtube.com/watch?v={2}&t={7}s)\n\n <center><iframe width="400" height="300" src="https://www.youtube.com/embed/{2}?start={7}&end={8}" frameborder="0" allow="accelerometer; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></center>\n\n'.format(m.group(1), m.group(2), m.group(3), m.group(4), m.group(5), m.group(6), m.group(7),tStart,tEnd)
Output = re.sub(Pattern, ReplaceMatch, Output)
print(Output)
См. Демонстрационную версию Python .
Вывод:
- [Michael - YouTube; **Start:1m 00s End:1m 03s**](https://www.youtube.com/watch?v=3nsoN-LS8RQ&t=60s)
<center><iframe width="400" height="300" src="https://www.youtube.com/embed/3nsoN-LS8RQ?start=60&end=63" frameborder="0" allow="accelerometer; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></center>