RegEx Split - 保持标点符号

时间:2011-09-12 21:32:55

标签: c# .net regex

我的句子看起来像这样:

"what is this? i want this to work. blah"

如何获得包含这样的标点符号的数组?

[0] = what is this?
[1] = i want this to work.
[2] = blah

3 个答案:

答案 0 :(得分:4)

使用示例文本,将其拆分为(?<=[.?!])\s*

除此之外,我想补充说,用正则表达式将文本可靠地分成句子是不可能的。

答案 1 :(得分:2)

您可以使用Regex.Split匹配前缀为标点符号的空白。

Regex.Split(input, "(?<=[.?!])\s+");

(?<=)是一个外表组。它会检查匹配是否在组之前,但不会捕获它。

答案 2 :(得分:0)

您需要一个进行子字符串替换的方法。使用Ruby的gsub,例如:

"I am a lion. Hear me roar! Where is my cub? Never mind, found him.".gsub(/[.?!]/, '\0|').split('|')
=> ["I am a lion.", " Hear me roar!", " Where is my cub?", " Never mind, found him."]

这假定句子的定义当然以.?!结尾。省略号(...)会将其搞砸一下。