从RegEx替换中获取匹配值

时间:2018-01-27 18:49:05

标签: c# asp.net regex

我有以下RegEx代码,它可以找到并替换链接的href。这符合预期。

但是,我需要获取匹配值,并在我拥有的数组中查找,以找到需要插入GUID的新值。

这是我目前的代码:

string patternLinks = @"((~\/link\.aspx\?_id=([A-Z0-9]{32})[^""]+))";
            bodyText = Regex.Replace(bodyText,
                      patternLinks,
                      "/$3/mylink.aspx");

“$ 3”是我需要提取的,能够使用它,在我的数组中查找。

My Array看起来像这样;

private static Dictionary<string, int> _GetNewID = new Dictionary<string, int>();

要获得新值,我需要做一些类似的事情,其中​​$ 3是值,来自上面的RegEx Replace:

_GetNewID[$3]

怎么可以这样做?

2 个答案:

答案 0 :(得分:0)

这是一种方法:

Regex linkRegex = new RegEx(@"((~\/link\.aspx\?_id=([A-Z0-9]{32})[^""]+))", RegexOptions.Compiled);
StringBuilder result = new StringBuilder();
Match match = linkRegex.Match(bodyText); // Reset
int lastEnd = 0;
if (match.Success)
{
    do
    {
        string value = match.Groups[3].Value;
        string replacement = string.Format("/{0}/mylink.aspx", value);

        result.Append(bodyText.Substring(lastEnd, match.Index - lastEnd)); // Remove the match
        result.Append(replacement); // Append replacement 

        lastEnd = match.Index + match.Length;
    } while ((match = match.NextMatch()).Success);
}
result.Append(bodyText.Substring(lastEnd)); // Append tail
bodyText = result.ToString();

答案 1 :(得分:0)

我想,你需要这个:

bodyText = 
    Regex.Replace(
          bodyText,
          patternLinks,
          match => $"/{_GetNewID[match.Groups[3].Value].ToString()}/mylink.aspx");