Поиск и замена с использованием регулярных выражений в возвышенном тексте: заменить текст перед поиском текста

0

Так что это будет мой пример:

In Kenya since 2010 <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&" onclick="yt.www.watch.player.seekTo(2*60+48);return false;">2:48</a> 
Where comes from: Bukavu <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&" onclick="yt.www.watch.player.seekTo(3*60+29);return false;">3:29</a>
She would have been killed <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&" onclick="yt.www.watch.player.seekTo(5*60+15);return false;">5:15</a> 

теперь время m: ss (например, 2:48) должно оставаться там, где они есть, но ТАКЖЕ добавляется к ссылке, которая предшествует ему, после "&" и в следующем формате: 2:48 должно стать t = 2m48s

Итак, в конце, все это должно выглядеть так (проверьте конец ссылок)

In Kenya since 2010 <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&t=2m48s" onclick="yt.www.watch.player.seekTo(2*60+48);return false;">2:48</a> 
Where comes from: Bukavu <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&t=3m29s" onclick="yt.www.watch.player.seekTo(3*60+29);return false;">3:29</a>
She would have been killed <a href="https://www.youtube.com/watch?v=fDTGpMJi0OI&list=PLqGkpApxFsX8k8ENdCr-9v8iRa2q5jXaE&t=5m15s" onclick="yt.www.watch.player.seekTo(5*60+15);return false;">5:15</a>

Теперь я узнал, я мог бы использовать \ d:.., чтобы найти время, но у меня нет идеи о том, как действовать, или если это вообще возможно с возвышенным текстом?

Теги:
replace
sublimetext2

1 ответ

1
Лучший ответ

Обновление 2:

Клянусь, я проверил на YouTube, и я смог перейти к видео с &t=h5m10s и он будет работать как 0:05:10. Если вам нужно, чтобы это было 5m10s или 0h5m10s, вам нужно сделать два разных выражения (поскольку Sublime Text не позволит вам выполнять сложные функции обратного вызова при замене регулярного выражения).

Для замены h:mm:ss:

href="(.*?)"(.*?)>(\d*):(\d{2}):(\d{2})

href="$1&t=$3h$4m$5s"$2>$3:$4:$5

Чтобы заменить m:ss:

href="(.*?)"(.*?)>(\d{1,2}):(\d{2})(?!:\d)

href="$1&t=$3m$4s"$2>$3:$4

Единственным необычным синтаксисом, который нуждается в объяснении, является (?!:\d). ?! синтаксис - это "негативный взгляд". Это означает, что в группе соответствия не последует дополнительная :\d, иначе это будет соответствовать часам/минутам/секундам.


Обновить:

Вот обновленное выражение для соответствия необязательным часам. Я дважды проверил, и вы можете использовать &t=h##m##s (т.е. Пустой час, если он не сопоставлен). Это означает, что мы можем сделать один поиск/замену и просто иметь пустой захват за час, если он не существует (вы увидите, что я имею в виду за секунду).

Совпадение:

href="(.*?)"(.*?)>((?:(\d*):)?(\d{1,2}):(\d{2}))

И замените на:

href="$1&t=$4h$5m$6s"$2>$3

Здесь все усложнилось. Давайте рассмотрим деталь, которая изменится:

(            # start an overarching capture group
  (\d*):?    # capture 0+ digits followed by an optional : (hours)
  (\d{1,2}): # capture 1-2 digits followed by a : (minutes)
  (\d{2})    # capture the last 2 digits (seconds)
)            # end the capture group

Теперь вы можете задаться вопросом, почему я использовал эту всеобъемлющую группу захвата. Это связано с тем, что нам нужен способ сохранить содержимое привязки одной и той же. Если мы не использовали это, нам пришлось бы заменять его hour:minute:second и час могут быть пустыми (значение 3:45 будет заменено на :3:45).


Вы можете сопоставить это:

href="(.*?)"(.*?)>(\d)+:(\d{2})

И замените его на

href="$1&t=$3m$4s"$2>$3:$4

Как это работает, он сначала находит любой якорный href, захватывая содержимое в первой группе захвата. Затем мы записываем все до > во вторую группу захвата. Затем мы фиксируем цифру 1+ (третий захват), а затем : и, наконец, захватываем последние 2 цифры (четвертый захват).

Мы по существу заменяем это всем тем же контентом, но обязательно добавляем &t=$3m$4s в конец ссылки. Вы можете увидеть рабочий пример в Regex101.

  • 0
    Вы должны быть в состоянии использовать это как регулярное выражение найти / заменить в Sublime Text, как это. Если это не сработает, дайте мне знать ... может быть что-то особенное в том, как Sublime Text обрабатывает захваченные группы.
  • 1
    Абсолютно здорово! Я использую это для копирования и исправления описаний YouTube, которые содержат временные ссылки в них. (они ломаются, когда вы копируете их). Я копирую их в Dreamweaver в режиме конструктора, затем перехожу к представлению кода и применяю поиск и замену. Работает отлично.
Показать ещё 9 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню