c#regex在=后提取链接

时间:2010-10-24 10:39:10

标签: c# regex text-extraction

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

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

假设正则表达式是最佳方式。

感谢

3 个答案:

答案 0 :(得分: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);
                }
        }

答案 1 :(得分:0)

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

您需要在=之后匹配引号之间的对应吗?

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

应该这样做。

(?<==\s*')声称有一个=,可选地后跟空格,后跟',就在我们当前位置之前(正面看后方)。

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

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

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

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

答案 2 :(得分:0)

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