2016-09-13 15 views
0

.srt 파일이 예와 같이, 3 개 근본적인 부분을 가진 블록으로 구성되는 것으로 알려져있다 :VIM을 통해 폐쇄 자막에 나타나는 번호를 제거하지 않고 .srt 파일을 정리하는 방법은 무엇입니까?

이제
228 
00:39:06,680 --> 00:39:13,460 
Lorem ipsum dolor sit amet 

, 폐쇄 자막의 말을 인용 스피커의 음성을 나타내는 일부 발췌가 있다는 것을 우리가 가정하자

228 
00:39:06,680 --> 00:39:13,460 
According to Erasmus, book 1, chapter 23... 

문제 : 내가 그러나 프레임 번호, 지우지 않고 프레임 기간을 삭제하여 .srt에서 텍스트 만 추출 할, 일이 추가 예와 같이 다른 사람의 문학 걸작 전자 자음 번호는 VIM을 통해 인용문으로 자막에 표시됩니다.

시도 : 정규 표현식과 substitute 명령을 사용하여, 나는 지금 옵션으로 각 기수 항목에 대한 검색 제외 :%s/\d\d:\d\d:\d\d,\d\d\d --> \d\d:\d\d:\d\d,\d\d\d/ /g와 시간 라인과 같은 생각을 가진 숫자를 "삭제"할 수있는 방법을 발견했다 /gc을 입력하면 텍스트를 무시합니다.

그러나 추기경 수를 유지해야하는 상당한 양의 인용문을 추출해야합니다. 모든 항목에 대해 yes/no을 선택하면 지루한 작업이됩니다.

나는 regex을 사용하는 데 부족한 기술을 가지고 있기 때문에 앞서 언급 한 전략을 수행하는 데는 "추악한"방식이 적어도 있다고 가정합니다. 아마, 더 우아한 방법뿐만 아니라 원치 않는 부분을 삭제하고,뿐만 아니라 같이, 프레임 및 시간 선이없는 원시 텍스트를 복구 :

Lorem ipsum dolor sit met 
According to Erasmus, book 1, chapter 23... 

누군가가 어떻게 할 알아?

답변

2
  1. 줄의 내용을 아무 것도 대체하지 마십시오. 실제로 줄을 삭제하십시오. 대신 :s/PATTERN//g를 사용, 제거 할 물건의 완전히을 구성에만 일치 라인에 ^$를 사용하여 :g/PATTERN/d (:help :g 참조)
  2. 앵커 당신의 패턴을 사용합니다.

함께 넣어 :

:g/^\d\+$/d 
:g/^\d\d:\d\d:\d\d,\d\d\d --> \d\d:\d\d:\d\d,\d\d\d$/d 

은 (와우, "D"의 많은입니다).

이 여전히 자리 을 구성는 "대화의 라인을"누킹의 가능성을 가지고 있지만, 그것은 단지 라인의 중간에있는 숫자를 먹지 않습니다.하지만 반드시 더 나은 (프로그래밍 언어 또는 자막 편집기 :

+1

': g/\ d -> \ d/d'이면 두 번째 단계로 충분할 것입니다. – romainl

+0

@hobbs, 답장을 보내 주셔서 감사합니다! 실제로,'g :'는 더 나은 직업을 만들었고 당신의 요점은 주목할 만하다. 나는 다음 번에 그들을 명심하겠습니다. 프로그래밍과 목적에 맞는 도구에 관해서는, 실제로 뭔가 도움이 될지 모르지만, 이것은 "취미"작업이었습니다. 그렇다면 'VIM'과 'regexp'가이 문제를 신속하게 해결하기 위해 내 눈앞에 뛰어 드는 도구였습니다. 어쨌든, 끝났어. :) BTW, @romainl, 귀하의 짧은 제안도 잘 작동합니다. 고맙습니다! – opcg

1

상황이 훨씬 더 쉽게 얻을 중 -

내가 빔보다 좀 더 목적에 맞는 것을 사용하는 것이 좋습니다 것이 더 나은 일을 수행하려면 당신이 앵커 사용하는 경우)보고 :

:%s/\v(%^|\n)\zs\d+\n\d{2}(:\d{2}){2},\d{3} --\> \d{2}(:\d{2}){2},\d{3}$\n// 

이 시퀀스 번호와 결합 된 시간을 고려을, 당신은 텍스트의 중간에 매칭 중 하나에 대해 걱정할 필요가 없습니다.

+0

안녕하세요, @SatoKatsura! 이것은 확실히 "하나의 돌로 두 마리를 죽인다";). 협조 해 주셔서 감사합니다. 이것을 확실하게 얻는 것은'regexp'에 대한 너무 많은 시간의 연구와 훈련을 필요로 할 것입니다. 고맙습니다. – opcg