开发者

string manipulation check and replace with fastest method

I have some strings like below:

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

I want to make a function that will do the following actions:

1- Checks if given string DOES HAVE an Underscore in it, and this underscore should be after some Numbers and Follow with some numbers: in this case 'num5' and 'num6' are invalid!

2- Replace the numbers after the last underscore with any desired string, for example I want 'num1 = "D123_1"' to be changed into 'D123_2'

So far I came with this idea but it is not working :( First I dont know how to check for criteria 1 and second the开发者_如何学Python replace statement is not working:

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

Any help and tips will be appriciated


What you are looking for is a regular expression. This is (mostly) from the top of my head. But it should easily point you in the right direction. The regular expression works fine.

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


In your code you split the String into an array of strings and then access the wrong index of the array, so it isn't doing what you want.

Try working with a substring instead. Find the index of the last '_' and then get the substring:

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

But before that check the validity of the string (see other answers). This code fragment will break when there's no '_' in the string.


You could use a regular expression (this is not a complete implementation, only a hint):

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


Use a good regular expression implementation. .NET has standard implementation of them

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜