改进正则表达式以将大文本拆分为句子



可能的重复项:
什么是解析单个句子的正则表达式?

我想将大文本拆分为句子.我从这里的答案中得到的正则表达式

string[] sentences = Regex.Split(mytext, @"(?<=[.!?])s+");

所以我想使用一种模式来做分裂,比如如果. ? !跟在spacecapital字母后面,则拆分。
大写字母表示句子的开头。

text = " Sentence one . Sentence e.g. two ? Sentence three.
sentence[1] = Sentence one 
sentence[2] = Sentence e.g. two

对于有问题的情况,例如缩写,我打算替换

mytext.replace("e.g.","eg"); 

如何在正则表达式中实现这一点?

>p{Lt}表示Unicode大写字母(包括重音等(,因此

string[] sentences = Regex.Split(mytext, @"(?<=[.!?])s+(?=p{Lt})");

应该做你想做的事。

(请注意,我认为.?不需要在字符类中进行转义,所以我也删除了它们,但请检查这是否仍然适用于这些字符。

但是,请注意,这仍然会分裂,例如 Mr. Jones......

最新更新