使用PowerShell或VBS从HTML文件中提取表

Aar*_*ann 2 .net regex windows vbscript powershell

我有一个需要修复的两部分问题.我会尽力描述它然后分解我"思考"的步骤.

我想在网页上找到一个特定的表格并通过电子邮件发送给自己.

目前我正在尝试的是使用GNU\Win32 wget.exe(我宁愿本地使用PowerShell,但由于某种原因我不能,也许是因为我使用的方法无法呈现ASPX页面?)使用wget我能够制作ASPX页面的本地html版本.

现在我一直在尝试解析文件并提取特定的表.在这种特殊情况下,表以开头<table border="0" cellpadding="2" cellspacing="2" width="300px">和结尾,</table>并且没有嵌套表.

我在我的问题上抛出一些正则表达式(是的,我知道正则表达式可能不是我需要的工具),但无济于事.

---修改这里是我现在的位置......

$content = (new-object System.Net.WebClient).DownloadString($url)
$found = $content -cmatch '(?si)<table border="0" cellpadding="2" cellspacing="2" width="300px"[^>]*>(.*?)Total Queries</td>(.*?)</tr>(.*?)</table>'
$result = $matches[3]
$result
Run Code Online (Sandbox Code Playgroud)

Kei*_*ill 5

我用PowerShell做过这种事情.这很简单:

PS> $url = "http://www.windowsitpro.com/news/PaulThurrottsWinInfoNews.aspx"
PS> $content = (new-object System.Net.WebClient).DownloadString($url)
PS> $content -match '(?s)<table[^>]+border\s*=\s*"0"\s*.*?>(.*?)</table>'
True
PS> $matches[1]

        <tr>
          <snip>
        </tr>
Run Code Online (Sandbox Code Playgroud)

刚刚替补widthborder,并300px0 您的正则表达式如:

PS> $content -match '(?s)<table[^>]+width\s*=\s*"300px"\s*.*?>(.*?)</table>'
Run Code Online (Sandbox Code Playgroud)

在匹配多个表的情况下,你必须从-match切换,这是一个布尔运算符,只是想找到一个匹配的Select-String,它可以找到所有的匹配,例如:

PS> $pattern = '(?s)<table[^>]+width\s*=\s*"300px"\s*.*?>(.*?)</table>'    
PS> $content  | Select-String -AllMatches $pattern | 
                Foreach {$_.Matches | $_.Group[1].Value}
Run Code Online (Sandbox Code Playgroud)

基本上所有匹配都在$ _.matches集合中.如果您知道该表始终是第三个,您可以这样访问:

... | Foreach {$_.Matches[2].Group[1].Value}
Run Code Online (Sandbox Code Playgroud)