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

本文关键字:字符串 最后 删除 | 更新日期: 2023-09-27 18:02:24

我有一个属性为

的字符串
  • RTT (50)
  • RTT (A) (50)
  • RTT (A) (B) (C) (50)

我想要的是从字符串中删除最后一个()事件。也就是说,如果字符串是- 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(" ("));

else部分将执行我想要的操作。然而,如何删除if部分中的最后一次出现是我卡住的地方。

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

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

如果您确定每个字符串至少包含一组括号:

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());

这应该是你想要的:

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

就这么简单。

有几个不同的选项可以考虑。

LastIndexOf

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

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

Regex与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);

这很简单。您可以像这样轻松地实现:

字符串a = RTT (50);

字符串res =。substring (0, a.LastIndexOf("(")

作为扩展:

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");

try something a function this:

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并替换为另一个字符串,并使用:

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

在本例中,您在value字符串中找到(字符串,并将(替换为string.Empty