Мне это нужно все время, и я постоянно разочаровываюсь в том, что функции Trim(), TrimStart() и TrimEnd() не принимают строки в качестве входных данных. Вы вызываете EndsWith() в строке и выясняете, заканчивается ли она другой строкой, но если вы хотите удалить ее с конца, вам нужно сделать подстроки для этого (или вызвать Remove() и молить единственный экземпляр...)
Почему эта основная функция отсутствует в .NET? И, во-вторых, любые рекомендации для простого способа реализации этого (предпочтительно не для маршрута регулярного выражения...)