使用RegEx在大括号之间提取字符串,即{{content}}

我得到一个字符串,其格式为{{some_text}}。 我想使用C#将其提取到一个集合中,并相信RegEx是最好的方法。 RegEx有点过头,但在这种情况下似乎足够强大。 这是我的例子:

 {{element='title'}} {{element='h1'}} {{element='price'}}

我想最终得到这样的东西:

collection [0] =“element =’title’”;

collection [1] =“url”;

collection [2] =“element =’photo’property =’src’maxwidth =’135’”;

collection [3] =“element =’h1’”;

collection [4] =“element =’price’”;

请注意,也没有重复项,但如果难以做到,我不想让事情复杂化。

我看到这篇文章做了类似但在括号内的内容 : 如何使用Regex在c#中的文本字符串中提取方括号的内容

我的问题是我有双括号而不是一个字符。 我怎样才能做到这一点?

完全取决于您链接的问题:

 ICollection matches = Regex.Matches(s.Replace(Environment.NewLine, ""), @"\{\{([^}]*)\}\}") .Cast() .Select(x => x.Groups[1].Value) .ToList(); foreach (string match in matches) Console.WriteLine(match); 

我已将[和]更改为{{和}}(已转义)。 这应该是你需要的collections。 请务必阅读正则表达式分解的另一个问题的第一个答案。 如果你使用它,理解它是很重要的。

RegEx足以满足您的需求。

试试这个正则表达式:

 \{\{.*?\}\} 

那将懒惰地匹配双括号之间的表达式。

编辑:这将为您提供字符串,包括双括号。 您可以手动解析它们,但如果正则表达式引擎支持前瞻和后瞻,您可以直接使用以下内容获取内容:

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

在进行比赛后,你需要摆脱重复。

 \{\{(.*?)}} 

结果1

  1. 元素=“标题”

结果2

  1. url

结果3

  1. 元素=“标题”

结果4

  1. element =’photo’property =’src’maxwidth =’135′

结果5

  1. 元素= ‘H1’

结果6

  1. 元素=“价格”