【问题标题】:Extract variables from text using RegEx and c#使用 RegEx 和 c# 从文本中提取变量
【发布时间】:2011-12-10 19:32:36
【问题描述】:

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

我正在解析的示例文本,并且我想对结果进行 foreach,我可以在其中获取变量“URL”和介于两者之间的文本:

Lorem ipsum dolor sit amet, consectetur[URL=/test.aspx?ID=12345]lorem ipsum[/URL] adipiscing 精英。 Nullam interdum eleifend mauris, nec condimentum 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]lorem ipsum dolor[/URL] quis augue。 整数 nec euismod sem。

【问题讨论】:

  • -1 表示非常糟糕的标题。
  • 这可能会有所帮助:regular-expressions.info/tutorial.html
  • 如何使用 String.IndexOf() API 来查找 URL 值,然后从该索引中您可以读取直到找到下一个 URL 字符串。希望你得到基础?
  • 当你感觉足够舒服的时候,你可以看看这个宝石:shop.oreilly.com/product/9781565922570.do
  • 从哪里开始阅读的好建议。

标签: c# regex


【解决方案1】:

这应该为你做:

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"

}

【讨论】:

  • 谢谢。这就是我选择的方式。
【解决方案2】:

如果您的文本看起来完全像这样,那么这种事情就会起作用,即 你没有嵌套的 URL,你的 URL 标签都是大写的

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

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

基本上,

  • 因为[] 是保留标记,要匹配它们,您需要添加前缀 通过反斜杠(即“转义”它们)

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

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

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

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

但如果您确定数据不存在这些异常情况,您会没事的!

【讨论】:

    【解决方案3】:

    这是请求的正则表达式

    \[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);
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      相关资源
      最近更新 更多