2011-10-19 29 views
-1

我有一個可能比較簡單的任務,但我的RegEx技能很差。任何人都可以幫助我,或者指引我朝着正確的方向嗎? :-)使用RegEx和c從文本中提取變量#

示例文本我解析,我想這樣做的結果一個foreach在那裏我能得到變量「URL」,並在之間的文本:

Lorem存有悲坐amet,consectetur [url =/test.aspx?ID = 12345] lorem ipsum [/ URL] adipiscing elit。 Nullam interdum eleifend mauris,nec 調味品nisi lacinia坐amet。 Mauris faucibus,orci ac [URL =/Default.aspx?ID = 222222] lorem [/ URL] convallis volutpat,dolor libero sollicitudin quam,id feugiat magna orci [URL =/Default.aspx?ID = 333333] ipsum dolor [/ URL] quis augue。 Integer nec euismod sem。

+0

-1非常糟糕的稱號。 – gsharp

+0

這可能是一些幫助:http://www.regular-expressions.info/tutorial.html – Purplegoldfish

+0

如何使用String.IndexOf()API來查找URL值,然後從該索引您可以讀取到下一個URL字符串是找到。希望你獲得基礎? – Zenwalker

回答

3

這應該爲你做它:

Regex theRegex = new Regex(@"\[URL=([^\]]+)\]([^\[]+)\[/URL\]"); 
string text = "Lorem ipsum dolor sit amet, consectetur[URL=/test.aspx?ID=12345]lorem ipsum[/URL] adipiscing elit. Nullam interdum eleifend mauris, nec condimentum nisi lacinia sit amet. Mauris faucibus, orci ac[URL=/Default.aspx?ID=222222]lorem[/URL] convallis volutpat, dolor libero sollicitudin quam, id feugiat magna orci[URL=/Default.aspx?ID=333333]lorem ipsum dolor[/URL] quis augue. Integer nec euismod sem."; 
MatchCollection matches = theRegex.Matches(text); 
foreach (Match thisMatch in matches) 
{ 
//  thisMatch.Groups[0].Value is e.g. "[URL=/test.aspx?ID=12345]lorem ipsum[/URL]" 
//  thisMatch.Groups[1].Value is e.g. "/test.aspx?ID=12345" 
//  thisMatch.Groups[2].Value is e.g. "lorem ipsum" 

} 
+0

謝謝。這是我選擇這樣做的方式。 –

0

這樣的事情會工作,如果你的文字看起來完全一樣,即 你有沒有嵌套的網址,您URL標籤全部在首都

"\[URL=([^\]]*)\]([^\[]*\)\[/URL\]" 

這應該捕捉兩組:1 = URL=之後的東西,2 = [URL]...[\URL]標記之間的東西。

基本上,

  • []保留標記,以配合他們,你需要用反斜槓前綴 他們(即「逃離」他們)

  • [^\[]比賽與工作不任何字符是一個開放的括號。

  • 圓括號確定可以捕獲的組。

注意事項:嵌套URL標籤將無法正常工作,這本身包含方括號是行不通的標籤,和引用字符串"..."也應該是免費的,從支架 - 即他們不會像一個正確的標記進行治療解析器會。

就我所知,解決這類問題的唯一辦法就是做一個完整的解析。

但是,如果你確定數據沒有這些異常,你會沒事的!

0

這裏是要求正則表達式

\[URL=(?<url>[^\]]*)\](?<text>[^\[]*)\[/URL\] 

您訪問與下面的代碼的請求的值:

var regex = new Regex(@"\[URL=(?<url>[^\]]*)\](?<text>[^\[]*)\[/URL\]"); 
    var matches = regex.Matches(textToSearchIn); 

    foreach (Match match in matches) 
    { 
     Debug.Print("Url: {0} Text: {1}", match.Groups["url"].Value, match.Groups["text"].Value); 
    } 
相關問題