gpt4 book ai didi

c# - 用值替换正则表达式中的命名组

转载 作者:太空狗 更新时间:2023-10-29 17:28:15 27 4
gpt4 key购买 nike

我想以与 string.Format 相同的方式使用正则表达式。我来解释

我有:

string pattern = "^(?<PREFIX>abc_)(?<ID>[0-9])+(?<POSTFIX>_def)$";
string input = "abc_123_def";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
string replacement = "456";
Console.WriteLine(regex.Replace(input, string.Format("${{PREFIX}}{0}${{POSTFIX}}", replacement)));

这有效,但我必须向 regex.Replace 提供“输入”。我不要那个。我想使用模式进行匹配,但也想使用与字符串格式相同的方式创建字符串,用值替换命名组“ID”。这可能吗?

我正在寻找类似的东西:

string pattern = "^(?<PREFIX>abc_)(?<ID>[0-9])+(?<POSTFIX>_def)$";
string result = ReplaceWithFormat(pattern, "ID", 999);

结果将包含“abc_999_def”。如何实现?

最佳答案

是的,这是可能的:

public static class RegexExtensions
{
public static string Replace(this string input, Regex regex, string groupName, string replacement)
{
return regex.Replace(input, m =>
{
return ReplaceNamedGroup(input, groupName, replacement, m);
});
}

private static string ReplaceNamedGroup(string input, string groupName, string replacement, Match m)
{
string capture = m.Value;
capture = capture.Remove(m.Groups[groupName].Index - m.Index, m.Groups[groupName].Length);
capture = capture.Insert(m.Groups[groupName].Index - m.Index, replacement);
return capture;
}
}

用法:

Regex regex = new Regex("^(?<PREFIX>abc_)(?<ID>[0-9]+)(?<POSTFIX>_def)$");

string oldValue = "abc_123_def";
var result = oldValue.Replace(regex, "ID", "456");

结果是:abc_456_def

关于c# - 用值替换正则表达式中的命名组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2656116/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com