Regex-用链接替换代码

本文关键字:代码 替换 链接 Regex- | 更新日期: 2023-09-27 18:21:16

我需要替换文本中的一个表达式,如以下示例:

测试AM123456测试B结果=testAwww.test.comtestB

这个字符串有1个字符M,后面跟着6位数字,表示要用超链接替换的代码。

请帮助我,使用regex来解决这个问题

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