【问题标题】:c# regex to extract link after =c#正则表达式在=之后提取链接
【发布时间】:2010-10-24 10:39:09
【问题描述】:

找不到更好的标题,但我需要一个正则表达式来从下面的示例中提取链接。

snip...  flashvars.image_url = 'http://domain.com/test.jpg' ..snip

假设正则表达式是最好的方法。

谢谢

【问题讨论】:

  • 我已编辑问题以反映我认为的意图。如果我弄错了,请提前道歉。

标签: c# regex text-extraction


【解决方案1】:

考虑以下示例代码。它显示了如何从您提供的字符串中提取。但是我已经扩展了一些字符串。通常,使用 .* 过于包容(如下例所示)。

主要的一点是,有几种方法可以满足您的要求,给出的第一个答案使用“环顾四周”,而第二个答案建议使用“组”方法。选择主要取决于您的实际数据。

        string[] tests = {
                @"snip...  flashvars.image_url = 'http://domain.com/test.jpg' ..snip",
                @"snip...  flashvars.image_url = 'http://domain.com/test.jpg' flashvars2.image_url = 'http://someother.domain.com/test.jpg'",
        };
        string[] patterns = {
                @"(?<==\s')[^']*(?=')",
                @"=\s*'(.*)'",
                @"=\s*'([^']*)'",
                             };
        foreach (string pattern in patterns)
        {
            Console.WriteLine();
            foreach (string test in tests)
                foreach (Match m in Regex.Matches(test, pattern))
                {
                    if (m.Groups.Count > 1)
                        Console.WriteLine("{0}", m.Groups[1].Value);
                    else
                        Console.WriteLine("{0}", m.Value);
                }
        }

【讨论】:

    【解决方案2】:

    一个简单的正则表达式是@"=\s*'(.*)'"

    【讨论】:

      【解决方案3】:

      编辑:与您编辑的问题匹配的新正则表达式:

      您需要匹配= 之后引号之间的内容,对吗?

      @"(?<==\s*')[^']*(?=')"
      

      应该这样做。

      (?&lt;==\s*') 断言有一个=,可选地后跟空格,然后是',就在我们当前位置之前(正向向后看)。

      [^']* 匹配任意数量的非' 字符。

      (?=') 断言匹配在下一个' 之前停止。

      此正则表达式不会检查这些引号内是否确实存在 URL。如果你想这样做,请使用

      @"(?<==\s*')(?=(?:https?|ftp|mailto)\b)[^']*(?=')"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-17
        • 1970-01-01
        • 1970-01-01
        • 2014-03-22
        相关资源
        最近更新 更多