【发布时间】:2014-09-10 23:38:25
【问题描述】:
我想使用 Powershell 在 .html 文档中搜索特定字符串并打印出来。
让我解释一下我的第一个功能:
我使用此函数搜索路径中包含字符串“Tag”的所有 .html 文档。之后我搜索字符串“ID:”,跳过标签"</TD><TD>" 并使用以下正则表达式打印出以下32个字符,即ID。下面你会看到 html 文件的一部分,然后是我的函数。
<TR VALIGN=TOP><TD>Lokation:</TD><TD>\Test1\blabla\asdf\1234\WS Auswertungen</TD></TR>
<TR VALIGN=TOP><TD>Beschreibung:</TD><TD></TD></TR>
<TR VALIGN=TOP><TD>Eigentümer:</TD><TD><IMG ALIGN=MIDDLE SRC="file:///C:\Users\D0262290\AppData\Local\Temp\23\User.bmp"> Wilmes, Tanja</TD></TR>
<TR VALIGN=TOP><TD>ID:</TD><TD>55C7B7F411E2661E001000806C38EBA0</TD></TR>
</TABLE></TD><TD><IMG ALIGN=MIDDLE SRC="file:///C:\Users\D0262290\AppData\Local\Temp\23\User.bmp">
功能:
Function searchStringID {
Get-ChildItem -Path C:\Users\blub\lala\Dokus -Filter *.html |
Select-String -Pattern "Tag" |
select Path |
Get-ChildItem |
foreach {
if ((Get-Content -Raw -Path $_.FullName) -replace "<.*?>|\s" -match "(?s)ID:(?<Id>[a-z0-9]{32})" ) {
printToOutputLog
}
}
}
这一切都很好。
现在我需要检查另外 2 条信息,但我无法弄清楚我必须使用的正则表达式,因为它没有固定长度的字符。 我总是必须在下面的问题中检查字符串“Tag”。
我的第一个问题:
我已经得到了文件的位置,所以我必须搜索字符串“Lokation:”(你可以在我之前发布的 html 上查看它)。
因此,获取我必须再次跳过标签</TD><TD> 并使用正则表达式来获取位置的信息。我的问题是我必须知道如何管理不固定长度的字符。有没有办法打印出 "Lokation:</TD><TD>" 和 "</TD></TR>" 之间的字符?
其他 html 文件中的标签都是相同的,所以我只需要一个适用于我的示例的解决方案。
我的第二个问题: 我必须读出对象的名称。在 html 文档中,它像这样存储在评论中。对象的名称在“[OBJECT:] 之后开始,以“]”结尾。同样,我不知道我可以使用哪个表达式。可以使用下面示例对象名称中的特殊字符。
<!-- ################################################################## -->
<!-- # [OBJECT: NAME BLA bla/ BLA_BLA 1 22:34] # -->
<!-- ################################################################## -->
如果有人能帮助我,我将不胜感激。每个提示对我都很有用,因为我的大脑真的卡在这里了。 谢谢和欢呼
【问题讨论】:
标签: powershell search regular-language