【问题标题】:regex get anything between double curly braces正则表达式在双花括号之间得到任何东西
【发布时间】:2016-03-11 00:45:45
【问题描述】:

我需要在 .NET 中获取双花括号之间的文本。 我得到了这个:

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

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

【问题讨论】:

    标签: .net regex


    【解决方案1】:

    我不是正则表达式的大师,但这应该可以解决您关于之前和之后专门选择元素的问题。试试:

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

    如果您想了解它的工作原理,我将引导您完成它:
    (?&lt;=\{\{)积极向后看的开始*,它匹配您要查找的组,但不将其包含在结果中。这基本上是您要求的第一部分。 \{\{) 是您实际要查找的转义字符。

    .*? 是说你想选择任何次数(但尽可能少)直到你到达(?=\}\}) 组,这是一个积极的前瞻,本质上是您正在寻找的第二部分。这会选择该选择器后面的所有内容,即两个转义的末端花括号,而不选择花括号本身。

    【讨论】:

      【解决方案2】:

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

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

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

      示例

      给定

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

      我们将提供以下捕获

      • first Group
      • second {special} group

      说明

      • {{:: 匹配左大括号
      • (...) :: 我们想要的位置捕获
        • (...|...)* :: 匹配重复出现的两者之一 由| 分隔的备选方案
          • [^}][^}]? :: 匹配任何不是闭合双括号的东西, }}? 是确保我们可以匹配奇数和偶数长度所必需的 字符串)
          • [^}]}? :: 匹配一个可选的单个右大括号,它不是 直接放在前面的大括号之前。
      • }} :: 匹配右双括号

      【讨论】:

        【解决方案3】:

        Groups[0] 是整个子字符串

        Groups[1] 等返回 () 之间的文本

        试试

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

        【讨论】:

          猜你喜欢
          • 2016-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-12
          • 2020-10-13
          相关资源
          最近更新 更多