想要在Regex.Replace调用期间编码文本

我有一个需要帮助的正则表达式.

我没有发布我的正则表达式,因为它与此无关.
我想要做的是,在替换期间,我还想通过对影响正则表达式的整个文本执行Html.Encode来修改${test}部分.

基本上,使用粗体标记包装正则表达式范围内的整个文本,还包括Html.Encode粗体标记之间的文本.

RegexOptions regexOptions = RegexOptions.Compiled | RegexOptions.IgnoreCase;
text = Regex.Replace(text, regexBold, @"<b>${text}</b>", regexOptions);
下面是我已经习惯从内容中挑选特殊替换字符串并将其本地化的实现.

protected string FindAndTranslateIn(string content)
        {
            return Regex.Replace(content, @"\{\^(.+?);(.+?)?}", new MatchEvaluator(TranslateHandler), RegexOptions.IgnoreCase);
        }

public string TranslateHandler(Match m)
{
    if (m.Success)
    {
        string key = m.Groups[1].Value;
        key = FindAndTranslateIn(key);
        string def = string.Empty;
        if (m.Groups.Count > 2)
        {
            def = m.Groups[2].Value;
            if(def.Length > 1)
            {
                def = FindAndTranslateIn(def);
            }
        }

        if (group == null)
        {
            return Translate(key, def);
        }
        else
        {
            return Translate(key, group, def);
        }
    }
    return string.Empty;
}

从匹配评估器委托你返回你想要替换的所有内容,所以在我返回的地方你会有粗体标签和编码调用,我也支持递归,所以你的需求有点过于复杂,但是你可以简单地减去示例您的需求.

这相当于对匹配集合进行迭代并执行替换方法作业的一部分.它只是为您节省了一些代码,并且您可以使用花哨的shmancy委托.

相关文章
相关标签/搜索