我正在尝试在C#应用程序中编写一个正则表达式来查找"{value}",以及对它之前到"[“的文本的反向引用,以及对它之后到"]”的文本的另一个反向引用。例如:
This is some text [[backreference one {value}
backreference two]]将匹配"[backreference one“、"{value}”和“\r\n backreference two]”。
我已经尝试了以下的修改版本,但没有成功。我认为我遗漏了单词边界,并且可能因为我试图查找的文本中的"{“而遇到问题。
\[\[(^[\{value\}]+)\{value\}(^\]\]+)\]\]我不确定是否可以使用正则表达式,但如果它能找到匹配的闭括号,那将是最理想的,例如,下面的代码将找到“[[value one ",”{backreferenc[e]}“和”ba[[ckref[e]backreferenc[e]t]]wo]“:
This is some text [[backreferenc[[e]] one {value}
ba[[ckref[[e]]rence t]]wo]]发布于 2012-10-30 22:37:08
您需要使用MatchEvaluator on Regex replace。此外,它还可以将匹配项分解为多个命名捕获组,以帮助执行匹配计算器处理,从而使您的工作更轻松。让我解释一下。
MatchEvaluator所做的是,它允许用户在匹配过程中使用C#委托,并通过检查捕获的实际匹配返回匹配发生时应该替换的内容。这样,您就可以根据需要进行文本处理。
这是一个基本的示例,它以基本的方式处理部分,但其结构是为了添加您的业务逻辑:
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";
}));正则表达式替换的结果是:
This is some text Jabberwocky at 120 Main.发布于 2012-10-30 19:56:19
对于你的问题的第一部分,试试这个:
\[\[(.*)({value})(.*)\]\]https://stackoverflow.com/questions/13138249
复制相似问题