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

时间:2011-04-14 09:32:18

标签: c# string split

我有一些字符串如下:

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; 
    }

任何帮助和提示都将适用

4 个答案:

答案 0 :(得分:1)

您正在寻找的是正则表达式。这(大部分)来自我的头脑。但它应该很容易指出你正确的方向。正则表达式工作正常。

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

答案 1 :(得分:1)

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

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
   }
}

答案 2 :(得分:1)

在你的代码中,你将String拆分成一个字符串数组,然后访问数组的错误索引,所以它没有做你想要的。

尝试使用子字符串。找到最后一个'_'的索引,然后获取子字符串:

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

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

答案 3 :(得分:0)

使用良好的正则表达式实现。 .NET has standard implementation of them