是否有与正则表达式一起使用的模式,可以忽略前缀标题,如“Mr.”或“女士”从这个时期的分裂?
例如,假设我们的字符串是:“X先生这样做了.Blah blah blah。” 我希望能够在一个句子结束时分开但不能在一个人的头衔上分开。
答案 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
并非完全位于Mr
,Ms
或Mrs
var tokens = Regex.Split(input, "(?<!Mr|Ms)(?<!Mrs)[.]");
或者使用固定长度,但我不推荐它,因为它在某些情况下不起作用(例如行的开头为Mr.
或文本xMr.
)。我只是添加这个作为参考,因为我相信你正在学习正则表达式!
var tokens = Regex.Split(input, "(?<!.Mr|.Ms|Mrs)[.]");