2010-10-16 151 views
2

我给出了一个字符串,其格式为{{some_text}}。我想使用C#将它提取到一个集合中,并且相信RegEx是实现此目的的最佳方法。 RegEx稍微凌驾于我的头上,但在这种情况下它看起来足够强大。这是我的例子:使用RegEx提取大括号之间的字符串,即{{content}}

<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> 

我想用这样的事情结束了:

集合[0] = “元素= '标题'”;

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

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

+0

你给节目的正则表达式究竟是如何分解的链接。使用{{和}}分别代替[nad]应该很容易。 – JoshD 2010-10-16 03:58:01

回答

3

从你链接的问题,以准确已将[和]更改为{{和}}(已转义)。这应该使你需要的集合。请务必阅读关于正则表达式细分的其他问题的第一个答案。如果你使用它,了解它是很重要的。

0

RegEx对于您所需要的功能足够强大。

试试这个正则表达式:

\{\{.*?\}\} 

,将匹配双括号之间的表达式,懒洋洋地。

编辑:这将给你的字符串,包括双括号。您可以手动解析它们,但如果正则表达式引擎支持先行和回顾后,你可以得到什么喜欢的东西里面直接:

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); 

我:

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

您需要在比赛结束后摆脱重复。

\{\{(.*?)}} 

结果1个

  1. 元素= '标题'

结果2

  1. URL

结果3

  1. 元素= '标题'

结果4

  1. 元素= '照片' 属性= 'SRC' maxwidth = '135'

结果5

  1. element ='h1'

结果6

  1. 元= '价格'
相关问题