使用正則表達式提取字符串中的完整句子(包括文字、空格、標點)

關於正則表達式,網上有非常多的介紹和使用說明。但本文主要通過一個實際案例來說明如何使用正則表達式。

使用語言:C#

案例背景:博主想通過看美劇來學習英語,但網上的字幕幾乎都是中英雙語字幕,所以採用正則表達式將字幕中無用的部分去掉,只保留英語原句。

string str = @"Dialogue: 0,0:01:47.29,0:01:49.17,*Default,NTP,0,0,0,,你真是太甜了\N{\fn微軟雅黑\fs14}Oh, that's so sweet.";    //一句標準字幕,帶時間軸、帶參數、帶中英雙語
string pattern = "[^a-zA-Z+\\s+\\p{P}]";    //本案例使用的正則表達式
string replacestr = "";    //替換字符,將無用部分替換爲""
string result = Regex.Replace(str, pattern, replacestr);//將str按pattern的規則、把無用的字符替換成replacestr
console.writeline(result);    //打印結果
console.writeline(result.Split('}')[1].Trim());    //對結果再次處理並打印

以上代碼每句都有註釋,不再多說明。這裏只解釋正則表達式pattern的意思,這是一個由3個正則合成的表達式,拆分如下:

1 [^a-zA-Z]:保留字符串中a-z、A-Z的字符,通俗講就是保留英文,^是一個邏輯符號,可以暫理解爲否定,刪除^的話,這句的意思就是去掉英文

2 \s:去掉空格

3 \p{P}:去掉標點符號

PS:由於1、2、3合成了一個正則表達式,故^對2、3均有效,即保留空格和標點

執行以上代碼,結果如下:

Dialogue: ,::.,::.,*Default,NTP,,,,,\N{\fn\fs}Oh, that's so sweet.
Oh, that's so sweet.

通過正則表達式處理的結果並不能滿足我的需求,故採用string中的分割、獲取、處理空格等操作再次加工,最終得到我需要的字符串。

經過如上處理,美劇的雙語字幕就被我轉化成可以直接閱讀的英語句子了。僅以此例拋磚引玉,請大家根據實際需求靈活變通。這裏只拿一句話舉例,對於字幕文件的處理,請參考IO流、讀寫操作等文章,這裏不再贅述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章