我有这样的文字:
<td class="devices-user-name">devicename</td>
<td>192.168.133.221</td>
<td>Storage Sync</td>
<td>10.3.3.335</td>
<td>Active</td>
<td>7/26/2016 8:39PM</td>
<td class="devices-details-button"><a class="btn btn-mini" href="#settings/devices/1/239a9cd0-d6c9-4e7d-9918-0cd686a57aac">Details</a></td>
我想抓住<td> </td>
和<td class=...> </td>
我所取得的是这个正则表达式:
<td.*>(.*?)<\/td>(\n(.*<td>(.*?)<\/td>))(\n(.*<td>(.*?)<\/td>))(\n(.*<td>(.*?)<\/td>))(\n(.*<td>(.*?)<\/td>))(\n(.*<td>(.*?)<\/td>))(\n(.*<td.*href="(.*?)"))
之后我仍然需要排除所有<td>
次匹配:
$MatchResult = $Matches.GetEnumerator() | ? {$_.Value -notmatch 'td'} | Sort Name
最后我得到了这个结果:
Name Value
---- -----
1 devicename
4 192.168.133.221
7 Storage Sync
10 10.3.3.335
13 Active
16 7/26/2016 8:39PM
19 #settings/devices/1/239a9cd0-d6c9-4e7d-9918-0cd686a57aac
但我很安静,确保有更好的方法,而不是重复群组,不包括其他等等,以使用其他/更好的技术,我很乐意学习。< / p>
你的建议是什么?
答案 0 :(得分:2)
您可以使用[regex]::Matches
获取多个匹配项(而非使用\n
):
$content = Get-Content 'your-File'
[regex]::Matches($content , '<td.*?>(.+?)<\/td>') | ForEach-Object {
$_.Groups[1].Value
}
<强>正则表达式:强>
<td.*?>(.+?)<\/td>
<强>输出:强>
devicename
192.168.133.221
Storage Sync
10.3.3.335
Active
7/26/2016 8:39PM
<a class="btn btn-mini" href="#settings/devices/1/239a9cd0-d6c9-4e7d-9918-0cd686a57aac">Details</a>
注意:您可能想要在另一个步骤中提取href或调整正则表达式 - 但您的问题是关于在<td>
之间捕捉所有内容...