如何使用正则表达式获取包含在括号之间的文本

本文关键字:之间 文本 何使用 正则表达式 获取 包含 | 更新日期: 2023-09-27 18:35:41

我今天的第二个问题!

我想在 c# 中使用正则表达式获取包含在括号(左括号及其右括号)之间的文本。我使用这个正则表达式:

@"'{'{(.*)'}'}

这里有一个例子:如果我的文本是:

text {{text{{anothertext}}text{{andanothertext}}text}} and text.

我想得到 :

{{text{{anothertext}}text{{andanothertext}}text}}

但是有了这个正则表达式,我得到:

{{text{{anothertext}}

我知道另一种获取文本的解决方案,但是正则表达式有解决方案吗?

如何使用正则表达式获取包含在括号之间的文本

幸运的是,.NET 的正则表达式引擎支持平衡组定义形式的递归:

Regex regexObj = new Regex(
    @"'{'{            # Match {{
    (?>               # Then either match (possessively):
     (?:              #  the following group which matches
      (?!'{'{|'}'})   #  (but only if we're not at the start of {{ or }})
      .               #  any character
     )+               #  once or more
    |                 # or
     '{'{ (?<Depth>)  #  {{ (and increase the braces counter)
    |                 # or
     '}'} (?<-Depth>) #  }} (and decrease the braces counter).
    )*                # Repeat as needed.
    (?(Depth)(?!))    # Assert that the braces counter is at zero.
    '}}               # Then match a closing parenthesis.", 
    RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);