Мне нужно разбить строку на подстроки с помощью набора целых слов.
Ввод: word wo wordword
Вывод (разбит на word
):
str1: word
str2: [space]wo wordword
Выход (разделен на wo
):
str1: word[space]
str2: wo
str3: [space]wordword
Подпись метода для требуемого метода должна выглядеть следующим образом:
public List<string> GetPhrases(string text, List<string> splitters);
Соображения:
только целые слова соответствуют
пробелы должны быть сохранены
сплиттерысписок содержит только отдельные слова
разделитель не содержит пробелов
совпадения должны быть без учета регистра
С помощью этого метода я смогу выделить целые совпадения слов в окне пользовательского интерфейса с возможностью сопоставления нескольких слов с разными выделениями, но я не могу обернуться, используя регулярное выражение.
В настоящее времяУ меня есть решение без регулярных выражений,но это не так здорово:
var words = Regex.Split(text, @"\s+").Where(s => s != string.Empty).ToList();
var str = "";
var list = new List<string>();
foreach (var word in words)
{
if (!splitters.Contains(word))
{
if(words.IndexOf(word) != words.Count - 1)
str += word + " ";
else
str += word;
}
else
{
if(!string.IsNullOrWhitespace(str))
list.Add(str);
list.Add(word);
str = "";
}
}
if(!string.IsNullOrWhitespace(str))
list.Add(str);
Проблема в том, что я не поддерживаю пробелы, такие как переводы строк, а заменяю их пробелом.