用最快的方法检查和替换字符串操作
本文关键字:替换 字符串 操作 检查和 方法 | 更新日期: 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有它们的标准实现