如何从字符串中提取特定的字符串,并使用正则表达式在c#中递增

本文关键字:字符串 正则表达式 提取 | 更新日期: 2023-09-27 18:27:58

我已经创建了一个id,我想增加这个id。为此,我需要替换字符串中的字符串

输入字符串-KST-HYD/15-116/001/CST

我提取了001,但我无法用002 替换001

背后的代码

 Regex regex = new Regex(@"'/('d+)'/");
Match match = regex.Match(txtId.Text.Trim());
if (match.Success)
{
    //Console.WriteLine(match.Value);
    int oldid = Convert.ToInt32(match.Groups[1].Value);
    int newid = oldid + 1;
    string newidstring = newid.ToString();
    string idformat = "KST-HYD/15-116/@/CST";
    StringBuilder builder = new StringBuilder(idformat);
    builder.Replace("@",newidstring);
    string newGeneratedId = builder.ToString();
    Response.Write(newGeneratedId);
}

如何从字符串中提取特定的字符串,并使用正则表达式在c#中递增

这里是一个单行解决方案

string txtId = "KST-HYD/15-116/001/CST";            
string result = Regex.Replace(txtId, @"(?<='/)'d{3}(?='/)", s => (int.Parse(s.Value)+1).ToString("d3"));

更新:RegEx:

(?<='/)数字以/开头,但它不是数字的一部分

'd{3}数字总是固定长度为3

(?='/)数字以/结尾,但它不是数字的一部分

使用string.Removestring.InsertConvert.ToInt32:

string txt = match.Groups[1].Value;
int pos = match.Index; //please add this for getting the position for the match
txtId.Text = txtId.Text.Remove(pos + 1, txt.Length).Insert(pos + 1, (Convert.ToInt32(txt) + 1).ToString("d3"));

编辑:感谢Giorgi先生和其他人的更正。我将答案更新为基于位置。

以下是我如何做到这一点,以便在找到匹配的位置进行替换:

var t = "KST-HYD/15-116/001/CST";
Regex regex = new Regex(@"'/(?<m>'d+)'/");
Match match = regex.Match(t);
if (match.Success)
{
    string txt = match.Groups["m"].Value;
    var pos = match.Index;
    var vali = int.Parse(txt);
    var sb = new StringBuilder(t);
    sb.Remove(pos + 1, txt.Length);
    sb.Insert(pos + 1, (++vali).ToString("000"));
    t = sb.ToString();
}