2014-01-09 32 views
2

我有一個SRT文件C# - 正則表達式字幕文件(.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'可能更容易,然後跳過你不感興趣的行,而不是通過正則表達式分割。 – 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

此解決方案僅適用於英文字幕。如果我們有其他語言(如阿拉伯語或波蘭語字幕),該怎麼辦。 –