2010-05-15 28 views
0

我有一串HTML,我需要抓住“[标题| http://www.test.com]”模式。正则表达式替换查询来挑选wiki语法

“dafasdfasdf,adfasd [测试| http://www.test.com/] ADF ddasfasdf [SDAF | http://www.madee.com/] ASSG广告”

我需要更换 “[标题| http://www.test.com]” 与“http://www.test.com/” >标题”。

最好的方法是什么?

我是越来越亲近:

string test = "dafasdfasdf adfasd [Test|http://www.test.com/] adf ddasfasdf [SDAF|http://www.madee.com/] assg ad "; 
     string p18 = @"(\[.*?|.*?\])"; 
     MatchCollection mc18 = Regex.Matches(test, p18, RegexOptions.Singleline | RegexOptions.IgnoreCase); 
     foreach (Match m in mc18) 
     { 
      string value = m.Groups[1].Value; 
      string fulltag = value.Substring(value.IndexOf("["), value.Length - value.IndexOf("[")); 
      Console.WriteLine("text=" + fulltag); 
     } 

必须有获得两个值出例如更清洁的方式“标题”位和网址本身。

有什么建议吗?

+0

请为您正在使用的语言添加标签。 – Gumbo 2010-05-15 14:45:51

回答

2

更换模式:

\[([^|]+)\|[^]]*] 

有:

$1 

的简短解释:

\[   # match the character '[' 
(   # start capture group 1 
    [^|]+ # match any character except '|' and repeat it one or more times 
)   # end capture group 1 
\|   # match the character '|' 
[^]]*  # match any character except ']' and repeat it zero or more times 
]   # match the character ']' 

A C#演示看起来像:

string test = "dafasdfasdf adfasd [Test|http://www.test.com/] adf ddasfasdf [SDAF|http://www.madee.com/] assg ad "; 
string adjusted = Regex.Replace(test, @"\[([^|]+)\|[^]]*]", "$1"); 
+0

非常感谢你,我进一步扩展了这个URL以获得2美元的价格。 Regex.Replace(bodyText,@“\ [([^ |] +)\ |([^]])”“,”$1“) ; – 2010-05-16 03:40:21

+0

@Jeremy,不客气。 – 2010-05-17 11:56:23