使用正则表达式提取字符串中的完整句子(包括文字、空格、标点)

关于正则表达式,网上有非常多的介绍和使用说明。但本文主要通过一个实际案例来说明如何使用正则表达式。

使用语言: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流、读写操作等文章,这里不再赘述。

你可能感兴趣的:(内功修炼)