如何从字符串中提取特定的字符串,并使用正则表达式在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);
}
这里是一个单行解决方案
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.Remove
、string.Insert
和Convert.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();
}