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

时间:2010-10-16 03:48:47

标签: c# .net regex

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

<a title="{{element='title'}}" href="{{url}}">
<img border="0" alt="{{element='title'}}" src="{{element='photo' property='src' maxwidth='135'}}" width="135" height="135" /></a>
<span>{{element='h1'}}</span>
<span><strong>{{element='price'}}<br /></strong></span>

我想结束这样的事情:

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

collection [1] =“url”;

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

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

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

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

我看到这篇文章做了类似的事情,但在括号内: How to extract the contents of square brackets in a string of text in c# using Regex

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

3 个答案:

答案 0 :(得分:4)

完全从您链接的问题中获取:

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

foreach (string match in matches)
    Console.WriteLine(match);

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

答案 1 :(得分:0)

RegEx功能足以满足您的需求。

试试这个正则表达式:

\{\{.*?\}\}

这将匹配双括号之间的表达式,懒惰。

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

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

答案 2 :(得分:0)

比赛结束后,您需要删除重复项。

\{\{(.*?)}}

结果1

  1. 元素= '标题'
  2. 结果2

    1. URL
    2. 结果3

      1. 元素= '标题'
      2. 结果4

        1. element ='photo'property ='src'maxwidth ='135'
        2. 结果5

          1. 元素= 'H1'
          2. 结果6

            1. 元素= '价格'