我有一些字符串如下:
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;
}
任何帮助和提示都将适用
答案 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