用最快的方法检查和替换字符串操作

本文关键字:替换 字符串 操作 检查和 方法 | 更新日期: 2023-09-27 17:50:03

我有一些像下面这样的字符串:

string num1 = "D123_1";
string num2 = "D123_2";
string num3 = "D456_11";
string num4 = "D456_22";
string num5 = "D_123_D";
string num5 = "_D_123";

我想创建一个函数,它将执行以下操作:

1-检查给定的字符串是否有下划线,下划线应该在一些数字之后,然后是一些数字:在这种情况下'num5'和'num6'是无效的!

2-将最后一个下划线后面的数字替换为任何所需的字符串,例如我想将'num1 = "D123_1"'更改为'D123_2'

到目前为止,我有了这个想法,但它不工作:(首先我不知道如何检查标准1和第二替换语句不工作:

    private string CheckAndReplace(string given, string toAdd)
    {
        var changedString = given.Split('_');
        return changedString[changedString.Length - 1] + toAdd; 
    }

任何帮助和提示将不胜感激

用最快的方法检查和替换字符串操作

您要查找的是正则表达式。这(大部分)是我的直觉。但它应该很容易为你指明正确的方向。正则表达式工作正常

public static Regex regex = new Regex("(?<character>[a-zA-Z]+)(?<major>''d+)_(?<minor>''d+)",RegexOptions.CultureInvariant | RegexOptions.Compiled);
Match m = regex.Match(InputText);
if (m.Succes)
{
  var newValue = String.Format("{0}{1}_{2}"m.Groups["character"].Value, m.Groups["major"].Value, m.Groups["minor"].Value);
}

在您的代码中,您将String拆分为字符串数组,然后访问该数组的错误索引,因此它不是您想要的。

尝试使用子字符串代替。查找最后一个'_'的索引,然后获得子字符串:

    private  string CheckAndReplace(string given, string toAdd) {
        int index = given.LastIndexOf('_')+1;
        return given.Substring(0,index)  + toAdd;
    }

但在此之前请检查字符串的有效性(参见其他答案)。当字符串中没有'_'时,此代码片段将中断。

您可以使用正则表达式(这不是一个完整的实现,只是一个提示):

private string CheckAndReplace(string given, string toAdd)
{
   Regex regex = new Regex("([A-Z]*[0-9]+_)[0-9]+");
   if (regex.IsMatch(given))
   {
      return string.Concat(regex.Match(given).Groups[1].Value, toAdd);
   }
   else 
   {
      ... do something else
   }
}

使用一个好的正则表达式实现。. net有它们的标准实现