2010-10-16 72 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. 元= '價格'