删除字符串中最后一次出现的字符串

时间:2014-05-09 03:12:10

标签: c# string

我有一个自然的字符串

  • RTT(50)
  • RTT(A)(50)
  • RTT(A)(B)(C)(50)

我想要的是从字符串中删除last()事件。也就是说,如果字符串是 - RTT(50),那么我只想返回RTT。如果是RTT(A)(50),我想要RTT(A)返回等。

我如何实现这一目标?我目前使用子串方法,无论如何都会取出任何出现的()。我想过使用:

Regex.Matches(node.Text, "( )").Count

要计算出现的次数,所以我做了类似下面的事情。

 if(Regex.Matches(node.Text, "( )").Count > 1)
      //value = node.Text.Remove(Regex.//Substring(1, node.Text.IndexOf(" ("));
 else
     value = node.Text.Substring(0, node.Text.IndexOf(" ("));

其他部分会做我想要的。但是,如何删除if部分中的最后一个匹配项是我被卡住的地方。

6 个答案:

答案 0 :(得分:6)

String.LastIndexOf方法可以满足您的需要 - 返回char或字符串的最后一个索引。

如果你确定每个字符串都至少有一组括号:

var result = node.Text.Substring(0, node.Text.LastIndexOf("("));

否则,您可以测试LastIndexOf

的结果
var lastParenSet = node.Text.LastIndexOf("(");

var result =
    node.Text.Substring(0, lastParenSet > -1 ? lastParenSet : node.Text.Count());

答案 1 :(得分:4)

这应该做您想要的:

your_string = your_string.Remove(your_string.LastIndexOf(string_to_remove));

就这么简单。

答案 2 :(得分:2)

有几种不同的选择需要考虑。

LastIndexOf

获取(字符的最后一个索引,并将子字符串转到该索引。这种方法的缺点是需要对)进行额外的最后一次索引检查,以确保格式正确,并且它与在左括号后发生的右括号配对(我没有执行此操作)检查下面的代码。)

var index = input.LastIndexOf('(');
if (index >= 0)
{
    var result = input.Substring(0, index);
    Console.WriteLine(result);
}

Regex with RegexOptions.RightToLeft

通过使用RegexOptions.RightToLeft,我们可以获取一对括号的最后一个索引。

var pattern = @"\(.+?\)";
var match = Regex.Match(input, pattern, RegexOptions.RightToLeft);
if (match.Success)
{
    var result = input.Substring(0, match.Index);
    Console.WriteLine(result);
}
else
{
    Console.WriteLine(input);
}

正则表达式取决于数字格式

如果你总是期望最后的括号有数字内容,类似于你的(50)被移除的示例值,我们可以使用匹配括号内任何数字的模式。

var patternNumeric = @"\(\d+\)";
var result = Regex.Replace(input, patternNumeric, "");
Console.WriteLine(result);

答案 3 :(得分:2)

这非常简单。您可以轻松实现这样的目标:

字符串a = RTT(50);

string res = a.substring(0,a.LastIndexOf("("))

答案 4 :(得分:1)

作为延伸:

namespace CustomExtensions
{
    public static class StringExtension
    {
        public static string ReplaceLastOf(this string str, string fromStr, string toStr)
        {
            int lastIndexOf = str.LastIndexOf(fromStr);
            if (lastIndexOf < 0)
                return str;

            string leading = str.Substring(0, lastIndexOf);
            int charsToEnd = str.Length - (lastIndexOf + fromStr.Length);
            string trailing = str.Substring(lastIndexOf+fromStr.Length, charsToEnd);

            return leading + toStr + trailing;
        }
   }
}

使用:

string myFavColor = "My favourite color is blue";
string newFavColor = myFavColor.ReplaceLastOf("blue", "red");

答案 5 :(得分:0)

尝试一下这个功能:

public static string ReplaceLastOccurrence(string source, string find, string replace)
{
    int place = source.LastIndexOf(find);
    return source.Remove(place, find.Length).Insert(place, replace);
}

它将删除最后一次出现的字符串字符串并替换为另一个字符串,并使用:

string result = ReplaceLastOccurrence(value, "(", string.Empty);

在这种情况下,您会在(字符串中找到value字符串,并将(替换为string.Empty。它也可以用来代替另一种信息。