正则表达式在双花括号之间得到任何东西

时间:2016-03-11 00:45:45

标签: .net regex

我需要在.NET中的双花括号之间获取文本。 我明白了:

\{{([^}]+)\}}

但是,它还包括双花括号。 有没有办法排除它们?

3 个答案:

答案 0 :(得分:2)

我不是正则表达式的主人,但这应该起作用并回答你关于专门选择前后元素的问题。尝试:

(?<=\{\{).*(?=\}\})

如果你想解释为什么会这样,我会引导你完成它:
 (?<=\{\{)正向后视 *的开头,它在您要查找的内容之后匹配一个组而不将其包含在结果中。这基本上是你要求的第一部分。 \{\{)是您实际需要的转义字符。

.*说你想要选择任何数量的时间,直到你到达{em>积极前瞻的小组(?=\}\}),基本上是第二部分你在寻找什么。这将选择该选择器后面的所有内容,两个转义的结束花括号,而不选择大括号本身。

*注意! javascript中支持正面观察

答案 1 :(得分:0)

Groups [0]是整个子串

组[1]等在()

之间返回文本

尝试

new Regex(@"\{{([^}]+)\}}").Match("dfdf{{456gfd}}3453").Groups[1]

答案 2 :(得分:0)

(此答案并非特定于.NET)

对于非贪婪的基本捕获正则表达式(因此将匹配用双引号包围的最小字符串),并且在匹配项中包括用单花括号括起来的文本:

{{(([^}][^}]?|[^}]}?)*)}}

示例

给予

{{first group}} nothing {{second {special} group}}

我们将捕获以下内容

  • first Group
  • second {special} group

说明

  • {{ ::匹配两个大括号
  • ( ... ) ::我们想要的位置捕获
    • (...|...)* ::匹配两个重复出现的两个 由|分隔的替代项
      • [^}][^}]? ::匹配除右大括号外的所有内容, }}?是确保我们可以匹配奇数和偶数长度的必要条件 字符串)
      • [^}]}? ::匹配一个可选的单个右大括号 直接在前括号之前。
  • }} ::匹配右双括号