Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串操作检查并替换为最快的方法_C#_String_Split - Fatal编程技术网

C# 字符串操作检查并替换为最快的方法

C# 字符串操作检查并替换为最快的方法,c#,string,split,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-将最后一个

我有一些字符串,如下所示:

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,其次,replace语句不起作用:

    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);
}
publicstaticregex Regex=newregex((?[a-zA-Z]+)(?\\d+)(?\\d+),RegexOptions.CultureInvariant | RegexOptions.Compiled);
匹配m=正则表达式匹配(InputText);
如果(m.成功)
{
var newValue=String.Format(“{0}{1}{2}”m.Groups[“character”].Value,m.Groups[“major”].Value,m.Groups[“minor”].Value);
}

你要找的是一个正则表达式。这(大部分)是我的想法。但它应该很容易为你指明正确的方向。正则表达式工作得很好

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);
}
publicstaticregex Regex=newregex((?[a-zA-Z]+)(?\\d+)(?\\d+),RegexOptions.CultureInvariant | RegexOptions.Compiled);
匹配m=正则表达式匹配(InputText);
如果(m.成功)
{
var newValue=String.Format(“{0}{1}{2}”m.Groups[“character”].Value,m.Groups[“major”].Value,m.Groups[“minor”].Value);
}

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


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


在您的代码中,您将字符串拆分为一个字符串数组,然后访问该数组的错误索引,因此它没有执行您想要的操作

请尝试使用子字符串。查找最后一个“\u1”的索引,然后获取子字符串:

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

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

在代码中,您将字符串拆分为一个字符串数组,然后访问该数组的错误索引,因此它没有执行您想要的操作

请尝试使用子字符串。查找最后一个“\u1”的索引,然后获取子字符串:

    private  string CheckAndReplace(string given, string toAdd) {
        int index = given.LastIndexOf('_')+1;
        return given.Substring(0,index)  + toAdd;
    }
但在此之前,请检查字符串的有效性(请参阅其他答案)。当字符串中没有“\u1”时,此代码片段将中断