По возрастанию числа каждые x строк и отметки времени пакетного изменения для файла .srt

311
unironicScriptKiddy

Я боролся с преобразованием файла в следующем формате

0:01:00.340 --> 0:01:01.380 ***subtitle text***  0:01:01.380 --> 0:01:02.390 ***subtitle text*** 

в стандартный формат .srt, то есть:

1 0:01:00,320 --> 0:01:01,360 ***subtitle text***  2  0:01:01,360 --> 0:01:02,320 ***subtitle text*** 

Ура заранее!

РЕДАКТИРОВАТЬ: удалил материал о моем прогрессе до ответа LotPing.

1
Пожалуйста, не кросспостите: https://stackoverflow.com/q/49929871/372239 Toto 6 лет назад 1
Извиняюсь, впервые спрашиваю и давлю на время. Если перекрестная публикация противоречит правилам, я буду более чем счастлив удалить один из двух вопросов. unironicScriptKiddy 6 лет назад 0
Другой пост был удален unironicScriptKiddy 6 лет назад 0

2 ответа на вопрос

2
LotPings

Мой любимый редактор Textpad может сделать это, в противном случае вам понадобится VBScript или Powershell.

enter image description here

Редактировать RegEx стал более сложным с 3 группами, ловящими области вокруг точек / запятых

Поиск: ^(\d:\d:\d)\.(\d[-> ]+\d:\d:\d)\.(\d)
Заменить:\i\n$1,$2,$3

Что делает RegEx:

  • искать h:mm:ssшаблон, где \dпредставляет цифру и является квантификатором, что означает один-два вхождения. Это всего два раза и т. Д.
  • [-> ]+класс любого из символов внутри [ ]следующего квантификатора +означает, по крайней мере, один, но как можно больше символов класса.
  • ^ на якорь в начале строки и
  • (группы) это
  • сопровождается буквальной точкой

Это заменено

  • \iприращение специально для TextPad
  • \nновая строка
  • и сгруппированный $1шаблон ака время
  • и буквальная запятая.

Ценным источником для RegEx является Regular-Expressions.info,
и для интерактивного тестирования RegEx или RE используйте RegEx101.com.


Выше RE в RegEx101.com без \i-функции

Интересно, а вам удалось сменить точку с запятой на запятую? Я скопирую и вставлю это в программу поиска и замены notepad ++ и посмотрю, поможет ли это. Кроме того, вы не возражаете быстро объяснить, что делают ваши операторы ^, \ d, \ i и $ 1? ура unironicScriptKiddy 6 лет назад 0
Нет, я не сделал, но это не проблема поймать с RE. Но мне жаль, что npp не поддерживает замену инкремента `\ i`. Я обновлю картинку. LotPings 6 лет назад 0
Спасибо за обновление, вы упомянули, что RegEx значительно упростил исследование! При копировании выражения в TextPad 8 обновляется первая запятая h: mm: ss, однако вторая метка времени не обновляется (после «->»). unironicScriptKiddy 6 лет назад 0
Смотрите обновленный RegEx и замену LotPings 6 лет назад 0
Отлично! Отмечено как ответ, большое спасибо. Не возражаете против объяснения части выражения \ d [->] +? Теперь я все понимаю, очень интересные вещи unironicScriptKiddy 6 лет назад 0
Снова отредактировал ответ, вы также можете проголосовать ;-) LotPings 6 лет назад 0
Приветствия, сделали, однако мой представитель ниже 15, таким образом это зарегистрировано, но не показывается публично. Я планирую быть намного более активным здесь, хотя так должно появиться, как только я отвечу на некоторые вопросы, я думаю! unironicScriptKiddy 6 лет назад 0
Ценным источником для RegEx является [Regular-Expressions.info] (http://www.regular-expressions.info/), а для интерактивного тестирования RegEx или RE - [RegEx101.com] (http://regex101.com). /) LotPings 6 лет назад 0
В закладки оба :) Я также нашел http://johnbokma.com/textpad/textpad-reference.pdf. Если у меня возникнут какие-либо проблемы с этим файлом srt, я должен задать другой вопрос или обновить этот? unironicScriptKiddy 6 лет назад 0
Задайте новые вопросы, чтобы получить более широкую аудиторию. Комментарии здесь привлекут мое внимание - но я не всегда в сети. LotPings 6 лет назад 0
0
dbenham

Для решения командной строки я бы использовал JREPL.BAT - утилиту регулярных выражений в виде чистого сценария (JScript / batch), которая работает на любом компьютере с Windows начиная с XP без необходимости использования какого-либо стороннего exe-файла.

Следующее использует ^продолжение строки, чтобы избежать прокрутки, но все это можно поместить в одну строку.

jrepl "^(\d+:\d\d:\d\d)\.(\d --> \d+:\d\d:\d\d)\.(\d)"^ "$txt=++n+'\r\n'+$1+','+$2+','+$3" /jq /jbeg "var n=0" /f test.txt /o - 

Используйте CALL JREPL, если вы помещаете команду в пакетный скрипт.

Как это вставить инкрементный номер? Toto 6 лет назад 0
@ Тото - Это не было - я полностью пропустил это требование. Я обновил ответ, чтобы добавить увеличивающиеся числа. dbenham 6 лет назад 0