Regex-用链接替换代码
本文关键字:代码 替换 链接 Regex- | 更新日期: 2023-09-27 18:21:16
我需要替换文本中的一个表达式,如以下示例:
测试AM123456测试B结果=testAwww.test.comtestB
这个字符串有1个字符M,后面跟着6位数字,表示要用超链接替换的代码。
请帮助我,使用regex来解决这个问题
这应该是
string Result = Regex.Replace("estA M123456 testB", "M[0-9]{6}", "www.test.com");
模式是M[0-9]{6}
-后面跟着6位的M
您可以使用自定义MatchEvaluator
根据数字翻译链接,如下所示:
private static Dictionary<int, string> knownLinks = new Dictionary<int, string>()
{
{123456, "www.test.com"},
{999999, "www.foo.com"},
};
private static string LinkReplacer(Match match)
{
int linkNumber = Convert.ToInt32(match.Groups[1].Value);
string link = knownLinks[linkNumber];
return link;
}
public static void Replace()
{
string text = "testA M123456 testB Result M999999 testC";
string replacedText = Regex.Replace(text, "M([0-9]{6})", LinkReplacer);
Console.WriteLine(replacedText);
}
// output: testA www.test.com testB Result www.foo.com testC
一些解释:
- 我们首先创建一个LinkReplacer函数,该函数告诉我们如何查找给定数字的链接。然后我们将LinkReplacer函数传递给Regex.Replace以用作MatchEvaluator。这意味着Regex.Replace现在将把找到的每个实例转发到该方法,并从中检索替换字符串
- 模式
M([0-9]{6})
中的()括号告诉Regex这是一个"组"。在LinkReplacer中,您可以看到我们随后访问该组以检索内容。(我们也可以去掉整个比赛的第一个字母,它总是一个"M"。) - 这本字典只是举个例子;我假设您有一个数据库,可以从中检索正确的链接
- 示例文本稍微长一点,以测试是否替换了所有出现的内容,而不仅仅是第一次,以及是否分别为每个内容计算替换字符串
有关详细信息:https://msdn.microsoft.com/en-us/library/ht1sxswy(v=vs.110).aspx