如何使用RegEx从HTML中提取某些数据?

时间:2014-09-03 15:18:11

标签: html regex powershell tags

我已获得以下代码:

<tr class="even">
            <td>
                Title1
            </td>
            <td>
                Name1
            </td>
            <td>
                Email1
            </td>
            <td>
                Postcode1
            </td>

我想使用RegEx来输出标签之间的数据,如下所示:

标题1 名1 EMAIL1 Postcode1 标题2 名称2 EMAIL2 Postcode2 ...

3 个答案:

答案 0 :(得分:1)

你不应该使用正则表达式来解析html,而是使用HTML解析器。

无论如何,如果你真的想要一个正则表达式,你可以使用这个:

>\s+<|>\s*(.*?)\s*<

<强> Working demo

enter image description here 匹配信息:

MATCH 1
1.  [51-57] `Title1`
MATCH 2
1.  [109-114]   `Name1`
MATCH 3
1.  [166-172]   `Email1`
MATCH 4
1.  [224-233]   `Postcode1`

答案 1 :(得分:1)

这应该消除标签之间的所有内容,并输出分隔的剩余空间:

$text = 
@'
<tr class="even">
            <td>
                Title1
            </td>
            <td>
                Name1
            </td>
            <td>
                Email1
            </td>
            <td>
                Postcode1
            </td>
'@

$text -split '\s*<.+?>\s*' -match '\S' -as [string]

Title1 Name1 Email1 Postcode1

答案 2 :(得分:0)

Don't use a regex. HTML不是常规语言,因此无法使用正则表达式对其进行正确解析。它大部分时间都会成功,但其他时候会失败。壮观。

使用Internet Explorer COM对象从文件中读取HTML:

$ie = new-object -com "InternetExplorer.Application"
$ie.visible = $false
$ie.navigate("F:\BuildOutput\rt.html")
$document = $ie.Document
# This will return all the tables
$document.getElementsByTagName('table')

# This will return a table with a specific ID
$document.getElementById('employees')

Here's the MSDN reference for the document class.