//project.Variables["Snippets_List_To_STring_1"].Value = Snippets_List_To_STring;
// заменяем псевдо-пробелы (табы и т.д.) на обычный пробел:
string regexTest = System.Text.RegularExpressions.Regex.Replace(project.Variables["Snippets_List_To_STring_1"].Value, @"[^\r\n \S]", " ", System.Text.RegularExpressions.RegexOptions.Multiline);
// заменяем 2 пробельных знака на 1:
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"[\ ]{2,}", " ", System.Text.RegularExpressions.RegexOptions.Multiline);
// разбиваем строки на многоточии
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @" *(\.\.\.|…) *", "\r\n", System.Text.RegularExpressions.RegexOptions.Multiline);
//regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"(?<=[^\!\.\?\r\n]{6,650}[\S]{1,})[\!\.\?]\ (?=[\w][^\.]{5,650})", ".\r\n", System.Text.RegularExpressions.RegexOptions.Multiline);
// умно разбиваем длинные строки на предложение по наличию точки, + пробела и заглавной буквы после нее, + текста без точки недалеко перед ней (правда большинство доргенов все равно потом любую точку в пределах предложения посчитают за конец предложения):
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"(?<=[^\!\.\?\r\n]{9,650})(?<!Mr|Mrs|Miss|Ms|Dr|\W\w)[\!\.\?]\ (?=[A-Z][^\.\r\n]{8,650})", ".\r\n", System.Text.RegularExpressions.RegexOptions.Multiline|System.Text.RegularExpressions.RegexOptions.IgnoreCase );
// разбиваем строки с началом на Mr, Mrs, Miss, Ms, Dr (ошибочно недоразбитые в предыдущем шаге):
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"(?<=[^\s])\.\ (?=Mr\.\ |Mrs\.\ |Miss\.\ |Ms\.\ |Dr\.\ )", ".\r\n", System.Text.RegularExpressions.RegexOptions.IgnoreCase );
// удаляем строки, где в конце нет знаков !?.:
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"^.*[^\.\!\?](\r\n)", "", System.Text.RegularExpressions.RegexOptions.Multiline);
// удаляем строки, где мало символов, количество задается в настройках проекта, а регулярку я прописал в первых блоках (^.{0,60}\r\n):
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, "^.{0,30}\r\n", "", System.Text.RegularExpressions.RegexOptions.Multiline);
// удаляем строки где есть какие-то экзотические (включая кириллицу) символы кроме перечисленных:
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"^.*[^ \n\r\-\:\(\)\\—\.\,\%\”\“\’\;\!\?\'\""\$\&\#\w\–\+]+.*\r\n", "", System.Text.RegularExpressions.RegexOptions.Multiline);
// удаляем строки где есть ссылки(www. или http):
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"^.*(www\.|http|\[URL=\S+).*(\r\n|$)", "");
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"^.*\.(com|org|net|biz|info|de|ru|uk|tk)\W.*(\r\n|$)", "");
// удаляем строки (уже готовые предложения), где нет ни единой маленькой буквы:
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"^[^a-zа-я]*\r\n", "\r\n", System.Text.RegularExpressions.RegexOptions.Multiline);
// удаляем строки, которые начинаются НЕ с заглавной буквы (лучше потом на С# по списку сделать):
//regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"^[^A-ZА-ЯЁ].+\r\n", "", System.Text.RegularExpressions.RegexOptions.Multiline);
// удаляем строки, где мало слов, количество задается в настройках проекта, а регулярку я прописал в первых блоках (^[^ \r\n$]*( +[^ \r\n$]*){0,4}\r\n):
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"(^[^ \r\n$]*( +[^ \r\n$]*){0,3}\r\n)", "", System.Text.RegularExpressions.RegexOptions.Multiline);
// удаляем строки, где от 30 шт. не буквенно-циферных знаков (типа много мусора):
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"^[\w ]*([^\w\r\n$ ][\w ]*){10,}\r\n", "", System.Text.RegularExpressions.RegexOptions.Multiline);
// удаляем строки, где подряд от 4 шт. не буквенно-циферных знаков (мусор):
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"^[\w ]*([^\w\r\n$ ]{4,}[\w ]*)\r\n", "", System.Text.RegularExpressions.RegexOptions.Multiline);
// удаляем пустые строки:
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"\n\r", "", System.Text.RegularExpressions.RegexOptions.Multiline);
// опять заменяем многоточие на 1 точку:
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"(?<=[^\.])\.{2,}(?=[^\.])", ".", System.Text.RegularExpressions.RegexOptions.Multiline);
// удаляем лишние повторение знаков препинания в конце строки:
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @" ?([\.\!\?\:\,\:\;\ ]){2,}(?=\r\n|$)", ".", System.Text.RegularExpressions.RegexOptions.Multiline);
// удаляем перед знаками .,:; ненужные пробелы:
regexTest = System.Text.RegularExpressions.Regex.Replace(regexTest, @"\ (\.|\,|\:|\;)", "$1", System.Text.RegularExpressions.RegexOptions.Multiline);
// в финальный список берем только строки начинающиесе с заглавной буквы или цифры:
List <string> Snippets_2 = new List <string>();
var splitter = "\r\n";
foreach (string x in regexTest.Split(new String[] {splitter}, StringSplitOptions.RemoveEmptyEntries))
{
if (char.IsUpper(x, 0) || char.IsDigit(x, 0))
{
Snippets_2.Add(x);
}
}