首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有反向引用的正则表达式

带有反向引用的正则表达式
EN

Stack Overflow用户
提问于 2012-10-30 19:42:53
回答 2查看 950关注 0票数 1

我正在尝试在C#应用程序中编写一个正则表达式来查找"{value}",以及对它之前到"[“的文本的反向引用,以及对它之后到"]”的文本的另一个反向引用。例如:

代码语言:javascript
复制
This is some text [[backreference one {value} 
backreference two]]

将匹配"[backreference one“、"{value}”和“\r\n backreference two]”。

我已经尝试了以下的修改版本,但没有成功。我认为我遗漏了单词边界,并且可能因为我试图查找的文本中的"{“而遇到问题。

代码语言:javascript
复制
\[\[(^[\{value\}]+)\{value\}(^\]\]+)\]\]

我不确定是否可以使用正则表达式,但如果它能找到匹配的闭括号,那将是最理想的,例如,下面的代码将找到“[[value one ",”{backreferenc[e]}“和”ba[[ckref[e]backreferenc[e]t]]wo]“:

代码语言:javascript
复制
This is some text [[backreferenc[[e]] one {value} 
ba[[ckref[[e]]rence t]]wo]]
EN

回答 2

Stack Overflow用户

发布于 2012-10-30 22:37:08

您需要使用MatchEvaluator on Regex replace。此外,它还可以将匹配项分解为多个命名捕获组,以帮助执行匹配计算器处理,从而使您的工作更轻松。让我解释一下。

MatchEvaluator所做的是,它允许用户在匹配过程中使用C#委托,并通过检查捕获的实际匹配返回匹配发生时应该替换的内容。这样,您就可以根据需要进行文本处理。

这是一个基本的示例,它以基本的方式处理部分,但其结构是为了添加您的业务逻辑:

代码语言:javascript
复制
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";

              }));

正则表达式替换的结果是:

代码语言:javascript
复制
This is some text Jabberwocky at 120 Main.
票数 3
EN

Stack Overflow用户

发布于 2012-10-30 19:56:19

对于你的问题的第一部分,试试这个:

代码语言:javascript
复制
\[\[(.*)({value})(.*)\]\]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13138249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档