Вы можете заменить каждую строку списка в исходной строке добавленным управляющим символом, а затем разделить его на этот символ.Например, ваша исходная строка:
List_1 fooo asdf List_2 bar fdsa XList_3 fooo bar
должна стать:
List_1 fooo asdf;List_2 bar fdsa;XList_3 fooo bar
, которая впоследствии будет разбита на основе ;
, что приведет к желаемому результату.Для этого я использую этот код:
string ori = "List_1 fooo asdf List_2 bar fdsa XList_3 fooo bar"
foreach (string word in l_lstValues) {
ori = ori.Replace(word, ";" + word);
}
ori = ori.Replace(" ;", ";"); // remove spaces before ;
ori = Regex.Replace(ori, "^;", ""); // remove leading ;
return (ori.split(";"));
Вы также можете собрать следующее регулярное выражение:
(\S)(\s?(List_1|XList_3|List_2))
Первый токен (\S)
предотвратит замену первого вхождения, авторой токен \s?
удалит пробел.Теперь мы используем его для добавления ;
:
string ori = "List_1 fooo asdf List_2 bar fdsa XList_3 fooo bar"
string regex = "(\S)(\s?(" + String.Join("|", l_lstValues) + "))";
ori = Regex.Replace(ori, regex, "$1;$3");
return (ori.split(";"));
Опция regex немного более опасна, поскольку слова могут содержать последовательности scape.