我有一个配置文件,我需要从中输出一些文本并将其转换为CSV。我陷入了第一步,即该文件几乎没有HTML注释要被排除,剩下的文本将用于导出到CSV目的。
HTML评论如下所示:
<!--<add name= />
<add name= />
<add name= />-->
我尝试过不同的正则表达式来解决这个问题,但没有运气。我最接近的是使用下面的正则表达式排除第一行和第三行,但这并不能解决问题,因为第二行仍然存在:
Get-Content –Path C:\Pathtothefile -notmatch "^\s*(<!--)|>*(-->)$"
这个正则表达式将取出以评论的一部分开头的行,但不是中间的行。我有多个文件有多个评论。
尝试了几种不同的组合("<!--[^>]*(-->)$")
,到目前为止没有运气。
答案 0 :(得分:2)
在您需要处理的文档中,<!--
始终位于行的开头,最后是-->
?如果是这样,那么您可能需要获取内容,并通过循环运行它,您可以逐行处理文档,切换内容的状态变量。
$data=@"
<!--<add name= />
<add name= />
<add name= />-->
a,b,c,d
1,2,3,4
"@
$state='content'
$data -split "`n" |
ForEach-Object {
If ($_ -match '^<!--') {
$state='comment'
return $null # because `continue` doesn't work in a foreach-object
}
If ($_ -match '-->$') {
$state='content'
return $null
}
If ($state -eq 'content') {
$_
}
}
结果
a,b,c,d
1,2,3,4
答案 1 :(得分:1)