我正在用句点和空格(“。”)分割字符串,我想用“。”进行分割,但是忽略它是否与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工作。
答案 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个句子(尽管您需要将。重新添加到除最后一个值之外的所有值的末尾)
已编辑以添加所有单个字符忽略
编辑后仅考虑忽略列表中的整个单词