gpt4 book ai didi

c# - 带反向引用的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 21:54:02 24 4
gpt4 key购买 nike

我试图在 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.

关于c# - 带反向引用的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13138249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com