Использование LINQ для удаления суффикса из строки, если он содержит суффикс в списке? - PullRequest
3 голосов
/ 12 июня 2011

Как я могу удалить суффикс из строки и вернуть его, используя C # / LINQ? Пример:

string[] suffixes = { "Plural", "Singular", "Something", "SomethingElse" };

string myString = "DeleteItemMessagePlural";

string stringWithoutSuffix = myString.???; // what do I do here?

// stringWithoutSuffix == "DeleteItemMessage"

Ответы [ 3 ]

3 голосов
/ 12 июня 2011
var firstMatchingSuffix = suffixes.Where(myString.EndsWith).FirstOrDefault();
if (firstMatchingSuffix != null)
    myString = myString.Substring(0, myString.LastIndexOf(firstMatchingSuffix));
2 голосов
/ 12 июня 2011

Вам необходимо построить регулярное выражение из списка:

var regex = new Regex("(" + String.Join("|", list.Select(Regex.Escape)) + ")$");

string stringWithoutSuffix = regex.Replace(myString, "");
0 голосов
/ 12 июня 2011
// Assuming there is exactly one matching suffix (this will check that)
var suffixToStrip = suffixes.Single(x => myString.EndsWith(x));

// Replace the matching one:
var stringWithoutSuffix =  Regex.Replace(myString, "(" +suffixToStrip + ")$", "");

ИЛИ, поскольку вы знаете длину соответствующего суффикса:

// Assuming there is exactly one matching suffix (this will check that)
int trim = suffixes.Single(x => myString.EndsWith(x)).Length;

// Remove the matching one:
var stringWithoutSuffix =  myString.Substring(0, myString.Length - trim);
...