我试图在 C# 应用程序中编写一个正则表达式来查找“{value}”,以及对它之前的文本的反向引用,直到“[[”,以及对它之后的文本的另一个反向引用,直到“]]”。例如:
This is some text [[backreference one {value}
backreference two]]
将匹配“[[反向引用一”、“{值}”和“\r\n反向引用二]]”。
我试过以下的修改版本,但没有成功。我相信我缺少单词边界,并且可能因为我试图查找的文本中的“{”而遇到麻烦。
\[\[(^[\{value\}]+)\{value\}(^\]\]+)\]\]
我不确定正则表达式是否可行,但如果它能找到匹配的右括号,那将是理想的,例如以下将找到 "[[backreferenc[[e]] one ", "{value}”和“ba[[ckref[[e]]rence t]]wo]]”:
This is some text [[backreferenc[[e]] one {value}
ba[[ckref[[e]]rence t]]wo]]
请您参考如下方法:
您需要使用 MatchEvaluator on Regex replace .此外,通过将匹配分解为命名的捕获组以帮助匹配评估程序处理,它会让您的生活更轻松。让我解释。
MatchEvaluator 的作用是,它允许使用 C# 委托(delegate)在匹配过程中进行调解,并通过检查捕获的实际匹配返回匹配发生时应替换的内容。这样您就可以根据需要进行文本处理。
这是一个基本示例,它以基本方式处理部分,但结构是用来添加您的业务逻辑的:
string text = @"This is some text [[Name: {name}]] at [[Address: {address}]].";
Regex.Replace(text,
@"(?:\[\[)(?<Section>[^\:]+)(?:\:)(?<Data>[^\]]+)(?:\]\])",
new MatchEvaluator((mtch) =>
{
if (mtch.Groups["Section"].Value == "Name")
return "Jabberwocky";
return "120 Main";
}));
Regex Replace 的结果是:
This is some text Jabberwocky at 120 Main.
