2010-10-17 71 views
0

我有一個字符串,我想在註釋標籤之間提取文本,操作它並將其替換回來。以下是我正在想辦法用:如何將RegEx替換爲集合

... 
<!--RegionStart url="http://domain1.com"--> 
    some text here 
<!--RegionFinish--> 
... 
<!--RegionStart url="http://domain2.com"--> 
    some text there 
<!--RegionFinish--> 
... 
<!--RegionStart url="http://domain3.com"--> 
    some text anywhere 
<!--RegionFinish--> 
... 

我想獲得的註釋標籤之間的文本集合並列舉直通他們是這樣的:

foreach (string item in collection) 
{ 
    string newText = item.Replace("some", "all") + Custom(url); 
    //put text back somehow 
} 

我試圖結束與此:

... 
<!--RegionStart url="http://domain1.com"--> 
    all text here domain1.com 
<!--RegionFinish--> 
... 
<!--RegionStart url="http://domain2.com"--> 
    all text there domain2.com 
<!--RegionFinish--> 
... 
<!--RegionStart url="http://domain3.com"--> 
    all text anywhere domain3.com 
<!--RegionFinish--> 
... 

我該怎麼做?

回答

2

最主要明白這裏有

  1. 非貪婪正則表達式匹配(*?等)需要
  2. 這可能是最容易使用帶有自定義MatchEvaluator更換。

這應該做的伎倆:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     outputTextBox.Text = ""; 
     Regex regex = new Regex("(<!--RegionStart url=\"http://(.*?)\"-->)(.*?)(<!--RegionFinish-->)", RegexOptions.Singleline); 

     string copy = inputTextBox.Text; 
     MatchCollection coll = regex.Matches(inputTextBox.Text);     
     outputTextBox.Text = regex.Replace(copy, new MatchEvaluator(Replace)); 
    } 

    public string Replace(Match m)   
    { 
     // Format the text you want to get back: 
     return String.Format("{0}{1} {2}{3}", 
      m.Groups[1].ToString() + Environment.NewLine, 
      m.Groups[3].ToString().Replace("some", "all").Trim(), 
      m.Groups[2].ToString().Trim() + Environment.NewLine, 
      m.Groups[4].ToString()); 
    } 
} 
+0

輝煌!!!!!! – TruMan1 2010-10-17 16:30:31