2014-01-09 2 views
2

У меня есть SRT файлC# - Файл субтитров Regex (.srt) для получения текстового содержимого?

1 
00:00:07,000 --> 00:00:09,000 
Time to amaze the world.. 
create by Hazy 

2 
00:00:11,000 --> 00:00:12,200 
show them 

3 
00:00:15,000 --> 00:00:16,500 
an impossible feat 

я хочу, чтобы получить текстовое содержание

Time to amaze the world.. 
create by Hazy, 
show them, 
an impossible feat 

Мои регулярные выражения:

string[] souceSrt = Regex.Split(inputText.Text, @"\n*\d+\n\d\d:\d\d:\d\d,\d\d\d --> \d\d:\d\d:\d\d,\d\d\d\n"); 

, но это не работает. Что мне делать??

+0

Не должно быть многострочного флага где-нибудь в вашем регулярном выражении? –

+3

Я думаю, что было бы проще использовать 'File.ReadAllLines', а затем пропустить строки, которые вам не интересны, вместо того, чтобы расщепляться через Regex. – Tim

+0

Я не понимаю, почему некоторые люди отказались от этого сообщения. –

ответ

5

Ваш подход не был плох, я думаю, что ваша модель не работает из-за перенос строк (что, вероятно, CRLF):

(?:\r?\n)*\d+\r?\n\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}\r?\n 

Обратите внимание, что ваш первый подход является более безопасным, чем поиск всех строк, которые содержат буквы (представьте себе персонажа, который говорит «сколько вам лет?»)

3

использованием RegexHero

string strRegex = @"^.*([a-zA-Z]).*$"; 
Regex myRegex = new Regex(strRegex, RegexOptions.Multiline); 

foreach (Match myMatch in myRegex.Matches(strTargetString)) 
{ 
    if (myMatch.Success) 
    { 
    //grab line 
    } 
} 

, если не то, что я пропустил, строки, которые вы не хотите, никогда не будет иметь буквенный символ в них.

+0

Это решение применимо только для английского субтитров. Если у нас есть другой язык, например, арабский или польский субтитры. –

Смежные вопросы