正则表达式因此致电

时间:2015-04-23 01:24:00

标签: c# regex

我正在制作一部电影刮刀/自动下载器,它会迭代我当前的电影收藏,找到新的推荐并下载新商品。

有一部分我用IMDb抓取元数据,它似乎陷入了这一点,我似乎无法弄清楚为什么......它运行了同样的代码与不同的imdb页面只是很好(这是新页面的第29次迭代)

我正在使用c#!

代码:

    private string Match(string regex, string html, int i = 1)
    {
        return new Regex(regex, RegexOptions.Multiline).Match(html).Groups[i].Value.Trim();
    }

正则表达式参数字符串内容:

 <title>.*?\\(.*?(\\d{4}).*?\\).*?</title>

html参数字符串内容:太大而无法在此处粘贴,但字面上是http://www.imdb.com/title/tt4422748/combined

的html字符串表示形式

如果在chrome中,您可以使用以下方式轻松查看:

视图-出处:http://www.imdb.com/title/tt4422748/combined

我在视觉工作室暂停了执行并向前走了,它继续运行但只是挂起(它不会让我一步,它只是运行)。如果我再次点击暂停,它将返回具有相同参数值的相同位置(并且我没有在无限循环中调用它。我对Regex很新,所以任何帮助都会受到赞赏!

1 个答案:

答案 0 :(得分:0)

使用.*就像是说我希望匹配所有内容,但没有任何内容。每次使用它都会导致解析器回溯上有很多不同的可能性,它变得没有响应,出现来锁定。

设计模式的人是否真的不知道 title 是否存在文本?我打赌99%的时间标题都有文字。为什么.*甚至被使用,至少.+怎么样?

如果您想在分隔符之间添加文本,请使用此

title\>(?<Title>[^<]+)\</title

然后通过命名组“Title”而不是group [0]提取匹配的文本。如果一个厌恶命名匹配捕获,则组[1]将具有实际匹配文本。

Regex Haters的答案

使用HTML敏捷包。