按时段分割,忽略少数情况

时间:2019-05-08 20:43:21

标签: c# regex

我正在用句点和空格(“。”)分割字符串,我想用“。”进行分割,但是忽略它是否与MR等少量模式匹配。 ,JR。 , [一个字母]。博士 模式列表是静态的。(不区分大小写)

示例:

1)我的名字叫MR。 ABC并在XYZ工作。

输出:不拆分。只需一行

2)我的名字是ABC先生。我在XYZ工作。

输出:string [0] =我的名字是ABC先生。         string [1] =我在XYZ工作。

3)我的名字是ABC。我在XYZ工作。

输出:string [0] =我的名字是ABC。         string [1] =我在XYZ工作。

4)我的名字叫MR。小ABC DEF。我在XYZ工作。

输出:string [0] =我的名字是MR。小ABC DEF。 (MR和Jr.忽略了案例)         string [1] =我在XYZ工作。

1 个答案:

答案 0 :(得分:1)

使用sln的正则表达式模式来模拟其工作方式

                    List<string> ignores = new List<string>(){ "MR", "MS", "MRS", "DR", "PROF" };

        ignores = ignores.Select(x => @"\b" + x).ToList();

        string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        foreach (char letter in alphabet.ToCharArray())
        {
            ignores.Add(@"\b" + letter);
        }

        string test = "This is a test for Prof. Plum. Here is a test for Ms. White. This is A. Test. Welcome to GMR. Next Line.";

        string regexPattern = $@"(?<!{string.Join("|", ignores)})\.\s";

        string[] results = Regex.Split(test, regexPattern, RegexOptions.IgnoreCase);

结果是3个句子(尽管您需要将。重新添加到除最后一个值之外的所有值的末尾)

已编辑以添加所有单个字符忽略

编辑后仅考虑忽略列表中的整个单词