从网站获取表格

时间:2015-01-10 13:41:44

标签: regex vb.net

我想得到桌子" Partite"在本网站上:
http://it.soccerway.com/national/italy/serie-a/20142015/regular-season/r27139/

所以我创建了这段代码:

Dim HTML As String = New WebClient().DownloadString(URLs(MetroComboBox2.SelectedIndex))
    Dim URL_Params As String = "&callback_params=" & Regex.Match(HTML, "'block_competition_matches_summary', ({[\w\s"",:]+})").Groups(1).ToString
    Dim Base_URL As String = "http://it.soccerway.com/a/block_competition_matches_summary?block_id=page_competition_1_block_competition_matches_summary_6"
    Dim Giornata_URL As String = Base_URL & URL_Params & "&action=changeView&params={""view""%3A1}"

使用Html变量我得到之前发布的链接,在 URL_Params 我试图匹配div类" block_competition_matches_summary &# 34;。
但显然正规则不会抓住这个元素。 所以我在 Giornata_Url 中汇总所有变量。我错了什么?

1 个答案:

答案 0 :(得分:1)

我想您正在尝试匹配网页的这一部分?

'block_competition_matches_summary', {"page":0,"bookmaker_urls":{"13":[{"link":"http:\/\/www.bet365.com\/home\/?affiliate=365_308136","name":"Bet 365"}]},"block_service_id":"competition_summary_block_competitionmatchessummary","round_id":27139,"outgroup":false,"view":2}

这个正则表达式永远不会匹配:

'block_competition_matches_summary', ({[\w\s",:]+})

数据结构包含嵌套大括号;字符类[\w\s",:]未满足的要求。

使用正则表达式匹配嵌套大括号并不容易。哪个关闭括号应该关闭比赛?

一个简单的替代方法是将匹配的结尾锚定到该行的末尾。这个正则表达式可以正常工作:

'block_competition_matches_summary', (\{.*?\})\);\n

说明:

  • ( - 捕获子模式的开始
  • \{ - 请远离括号,因为它们在正则表达式语法中具有特殊含义
  • .*? - 任意数量的字符,非贪婪(这在此必不可少)
  • \} - 再次,逃避大括号
  • ) - 捕获子模式的结束
  • \) - 文字字符:右括号
  • ; - 字面字符:分号
  • \n - linebreak

我建议您将其与RegexOptions.Singleline结合使用,以防万一您要尝试匹配的表达式中存在换行符。

最终评论:请在将结果字符串添加到URL_Params之前对其进行网址编码。这使得完整的陈述:

Dim URL_Params As String = "&callback_params=" & WebUtility.UrlEncode(Regex.Match(HTML, "'block_competition_matches_summary', (\{.*?\})\);\n", RegexOptions.Singleline).Groups(1).Value)