忽略前缀标题,如" Mr。"何时使用Regex Split()

时间:2014-04-12 03:25:01

标签: c# regex split

是否有与正则表达式一起使用的模式,可以忽略前缀标题,如“Mr.”或“女士”从这个时期的分裂?

例如,假设我们的字符串是:“X先生这样做了.Blah blah blah。” 我希望能够在一个句子结束时分开但不能在一个人的头衔上分开。

2 个答案:

答案 0 :(得分:1)

我觉得这样的事情对你有用

string input = "Mr. and MRS. X did so and so... blah blah blah.";
var tokens = Regex.Split( input, @"(?<!\bMr|\bMs|\bMrs)[.]{1,3}", RegexOptions.IgnoreCase );

这会产生[&#34;先生和MRS。 X这样做了&#34;,&#34; blah blah blah&#34;]作为代币。重要的部分是模式的负面后视部分。

(?<!\bMr|\bMs|\bMrs)

因此,正则表达式只匹配其中一个标题之前的 NOT 期间。

答案 1 :(得分:0)

您可以使用negative lookbehind进行此拆分。负面观察并不支持其中的可变长度。所以要么你必须使它固定长度,要么需要使用多个。

使用多个lookbehind。这意味着dot并非完全位于MrMsMrs

之后
var tokens = Regex.Split(input, "(?<!Mr|Ms)(?<!Mrs)[.]");

或者使用固定长度,但我不推荐它,因为它在某些情况下不起作用(例如行的开头为Mr.或文本xMr.)。我只是添加这个作为参考,因为我相信你正在学习正则表达式!

var tokens = Regex.Split(input, "(?<!.Mr|.Ms|Mrs)[.]");