【发布时间】:2016-03-11 00:45:45
【问题描述】:
我需要在 .NET 中获取双花括号之间的文本。 我得到了这个:
\{{([^}]+)\}}
但是,它还包括双花括号。 有没有办法排除它们?
【问题讨论】:
我需要在 .NET 中获取双花括号之间的文本。 我得到了这个:
\{{([^}]+)\}}
但是,它还包括双花括号。 有没有办法排除它们?
【问题讨论】:
我不是正则表达式的大师,但这应该可以解决您关于之前和之后专门选择元素的问题。试试:
(?<=\{\{).*?(?=\}\})
如果您想了解它的工作原理,我将引导您完成它:(?<=\{\{) 是积极向后看的开始*,它匹配您要查找的组,但不将其包含在结果中。这基本上是您要求的第一部分。 \{\{) 是您实际要查找的转义字符。
.*? 是说你想选择任何次数(但尽可能少)直到你到达(?=\}\}) 组,这是一个积极的前瞻,本质上是您正在寻找的第二部分。这会选择该选择器后面的所有内容,即两个转义的末端花括号,而不选择花括号本身。
【讨论】:
(此答案并非特定于 .NET)
对于非贪婪的基本捕获正则表达式(因此将匹配用双引号括起来的最小字符串)并在匹配中包括用单个花括号括起来的文本:
{{(([^}][^}]?|[^}]}?)*)}}
给定
{{first group}} nothing {{second {special} group}}
我们将提供以下捕获
first Groupsecond {special} group{{:: 匹配左大括号(...) :: 我们想要的位置捕获
(...|...)* :: 匹配重复出现的两者之一
由| 分隔的备选方案
[^}][^}]? :: 匹配任何不是闭合双括号的东西,
}}(? 是确保我们可以匹配奇数和偶数长度所必需的
字符串)[^}]}? :: 匹配一个可选的单个右大括号,它不是
直接放在前面的大括号之前。}} :: 匹配右双括号【讨论】:
Groups[0] 是整个子字符串
Groups[1] 等返回 () 之间的文本
试试
new Regex(@"\{{([^}]+)\}}").Match("dfdf{{456gfd}}3453").Groups[1]
【讨论】: