代码之家  ›  专栏  ›  技术社区  ›  Frederik Vig

regex replace和replacement字符串

  •  0
  • Frederik Vig  · 技术社区  · 15 年前

    我有以下代码:

    Regex.Replace(text, words.ToString(), "<dfn title=\"" + this.FindDefinition("$0")  + "\">$0</dfn>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
    

    我遇到的问题是findDefinition方法。我想发送原始单词进行查找并返回定义文本。这是可能的,还是需要创建这样的模板:

    Regex.Replace(text, words.ToString(), "<dfn title=\"{$0}\">$0</dfn>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
    

    然后搜索它,用我的定义替换它?

    我也尝试过:

    Regex.Replace(text, words.ToString(), this.ReplaceWord, RegexOptions.IgnoreCase | RegexOptions.Compiled); 
    
    private string ReplaceWord(Match m)
    {
        return "<dfn title=\"" + this.FindDefinition(m.Value) + "\">$0</dfn>";
    }
    

    使用findDefinition方法可以很好地工作,但在获取原始值时遇到了问题。

    我有什么遗漏吗?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Yannick Motton    15 年前

    试试这个:

    return string.Format("<dfn title=\"{0}\">{1}</dfn>",
                         this.FindDefinition(m.Value),
                         m.Value);
    
        2
  •  0
  •   Pasi Savolainen    15 年前

    您正在手工构建XML,它几乎总是完全错误的。

    您需要使用评估器(replaceWord)。你为什么不做如下的事情:

    private string ReplaceWord(Match m)
    {
        return "<dfn title=\"" + this.FindDefinition(m.Value) + "\">"+m.Value+"</dfn>";
    }
    

    我倾向于在regex中使用m.groups[0].value和use grouping。