我有以下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]
怎么可以这样做?
答案 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");