使用RegEx和c#从文本中提取变量

时间:2011-10-19 10:24:16

标签: c# regex

我有一个可能很简单的任务,但我的RegEx技能很差。任何人都可以帮助我,或指出我正确的方向? : - )

示例文本我正在解析,而且我想对结果做一个foreach,我可以得到变量“URL”和中间的文本:

  

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。

3 个答案:

答案 0 :(得分:4)

这应该适合你:

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"

}

答案 1 :(得分:0)

如果你的文字看起来完全像这样,那么这种事情就会奏效,即 如果您没有嵌套网址,则URL标记全部为大写字母

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

这应该捕获两组:1 = URL=之后的东西,2 = [URL]...[\URL]标记之间的东西。

基本上,

  • 由于[]是保留令牌,为了匹配它们,您需要添加前缀 他们用反斜杠(即“逃避”他们)

  • [^\[]匹配任何不是开放式括号的字符。

  • 括号确定可以捕获的组。

注意事项:嵌套的URL标签不起作用,本身包含方括号的标签将不起作用,引用的字符串"..."也应该没有括号 - 即它们不会被视为正确的标记解析器会。

据我所知,解决此类问题的唯一方法是进行完整的解析。

但如果您确定数据没有这些异常,那么您就可以了!

答案 2 :(得分: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);
   }
相关问题