我正在使用C#regex解析文本.我想为每场比赛只替换一个特定组.我在这里是怎么做的:
void Replace(){
  string newText = Regex.Replace(File.ReadAllText(sourceFile), myRegex, Matcher, RegexOptions.Singleline);
  //.......   
}
void string Matcher(Match m){
  // how do I replace m.Groups[2] with "replacedText"?
  return ""; // I want to return m.Value with replaced m.Group[2]
}
Jus*_*gan 11
这应该这样做:
string Matcher(Match m)
{
    if (m.Groups.Count < 3)
    {
        return m.Value;
    }
    return string.Join("",  m.Groups
                             .OfType<Group>() //for LINQ
                             .Select((g, i) => i == 2 ? "replacedText" : g.Value)
                             .Skip(1) //for Groups[0]
                             .ToArray());
}
示例:http://rextester.com/DLGVPA38953
编辑:虽然以上是你的问题的答案,你可能会发现零宽度的外观更简单:
Regex.Replace(input, @"(?<=e)l+(?=o)", replacement)
示例:http://rextester.com/SOWWS24307
您可以使用MatchEvaluator:试试这个。
var replaced = Regex.Replace(text, pattern, m => m.Groups[1] + "AA" + m.Groups[3]);
我在 stackoverflow 中找到了一篇与此相关的帖子:watch This
这个怎么样?
    static string Matcher(Match m)
    {
        var group = m.Groups[2];
        var startIndex = group.Index - m.Index;
        var length = group.Length;
        var original = m.Value;
        var prior = original.Substring(0, startIndex);
        var trailing = original.Substring(startIndex + length);
        return string.Concat(prior, "replacedText", trailing);
    }
| 归档时间: | 
 | 
| 查看次数: | 14110 次 | 
| 最近记录: |