删除字符串中的所有标签标签
Remove all label tags inside a string
我想删除字符串中的所有标签。
这是输入字符串。
<p>
<title>Contact Us</title>
</p>
<table dropzone="copy">
<tbody>
<tr>
<td class="label" style="cursor: default;">Full Name</td>
<td style=
"cursor: default;">[<label id="{0a4a7240-9606-416a-bf7b-ef11a47cca8e}">First name</label>] [<label id="{94263497-683b-46f9-ba0f-69f4c2736598}">Last name</label>]</td>
</tr>
<tr>
<td class="label" style="cursor: d
efault;">Telephone</td>
<td style="cursor: default;">[<label id="{ce68e02e-e9fd-40ee-9375-ee1b05972e9b}">Phone</label>]</td>
</tr>
<tr>
<td class="label" style="cursor: default;">Email</td>
<td style="cursor: default;">[<label id="{411b580e-f7e9-4dd2-a70d-947385360cd0}">Email</label>]</td>
</tr>
<tr>
<td class="label" style="cursor: default;">Message</td>
<td style="cursor: default;">[
<label id="{13e2ff23-135c-4c6d-beb4-2960a533cb98}">Your Message</label>]</td>
</tr>
<tr>
<td class="label" style="cursor: default;">Company</td>
<td style="cursor: default;">[<label id="{c3f22c3a-8fc1
-48a4-8d6a-fe346024ca2b}">Company</label>]</td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
label 标签需要删除,但字符串中的值不应删除
<label id="{0a4a7240-9606-416a-bf7b-ef11a47cca8e}">First name</label>
会变成 First name
<label id="{ce68e02e-e9fd-40ee-9375-ee1b05972e9b}">Phone</label>
会变成Phone
<label id="{411b580e-f7e9-4dd2-a70d-947385360cd0}">Email</label>
会变成Email
<label id="{13e2ff23-135c-4c6d-beb4-2960a533cb98}">Your Message</label>
会变成 Your Message
<label id="{c3f22c3a-8fc1-48a4-8d6a-fe346024ca2b}">Company</label>
会变成Company
我尝试了以下正则表达式 [Regex]::Match( $text, '(?s) 但它不起作用。
如有任何建议,我们将不胜感激
提前致谢
这个正则表达式可以工作,你可以使用 -replace
operator instead of the call to Regex.Replace
:
(Get-Content path\to\file -Raw) -replace '<label id="\{[\d\w-]+}">([a-z ]+)<\/label>', ''
一般是a bad idea to attempt to parse HTML with regular expressions.
而是使用专用的 HTML 解析器作为 HtmlDocument class
例子
function ParseHtml($String) {
$Unicode = [System.Text.Encoding]::Unicode.GetBytes($String)
$Html = New-Object -Com 'HTMLFile'
if ($Html.PSObject.Methods.Name -Contains 'IHTMLDocument2_Write') {
$Html.IHTMLDocument2_Write($Unicode)
} else {
$Html.write($Unicode)
}
$Html.Close()
$Html
}
$Html = ParseHtml ' # Your Html
<p>
...
<p> </p>
'
$Html.getElementsByTagName('label') |ForEach-Object { $Null = $_.removeNode() }
$Html.body.innerHtml
<P></P>
<TABLE dropzone="copy">
<TBODY>
<TR>
<TD class=label style="CURSOR: default">Full Name</TD>
<TD style="CURSOR: default">[First name] [Last name]</TD></TR>
<TR>
<TD class=label style="CURSOR: d efault">Telephone</TD>
<TD style="CURSOR: default">[Phone]</TD></TR>
<TR>
<TD class=label style="CURSOR: default">Email</TD>
<TD style="CURSOR: default">[Email]</TD></TR>
<TR>
<TD class=label style="CURSOR: default">Message</TD>
<TD style="CURSOR: default">[ Your Message]</TD></TR>
<TR>
<TD class=label style="CURSOR: default">Company</TD>
<TD style="CURSOR: default">[Company]</TD></TR></TBODY></TABLE>
<P></P>
<P></P>
我想删除字符串中的所有标签。
这是输入字符串。
<p>
<title>Contact Us</title>
</p>
<table dropzone="copy">
<tbody>
<tr>
<td class="label" style="cursor: default;">Full Name</td>
<td style=
"cursor: default;">[<label id="{0a4a7240-9606-416a-bf7b-ef11a47cca8e}">First name</label>] [<label id="{94263497-683b-46f9-ba0f-69f4c2736598}">Last name</label>]</td>
</tr>
<tr>
<td class="label" style="cursor: d
efault;">Telephone</td>
<td style="cursor: default;">[<label id="{ce68e02e-e9fd-40ee-9375-ee1b05972e9b}">Phone</label>]</td>
</tr>
<tr>
<td class="label" style="cursor: default;">Email</td>
<td style="cursor: default;">[<label id="{411b580e-f7e9-4dd2-a70d-947385360cd0}">Email</label>]</td>
</tr>
<tr>
<td class="label" style="cursor: default;">Message</td>
<td style="cursor: default;">[
<label id="{13e2ff23-135c-4c6d-beb4-2960a533cb98}">Your Message</label>]</td>
</tr>
<tr>
<td class="label" style="cursor: default;">Company</td>
<td style="cursor: default;">[<label id="{c3f22c3a-8fc1
-48a4-8d6a-fe346024ca2b}">Company</label>]</td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
label 标签需要删除,但字符串中的值不应删除
<label id="{0a4a7240-9606-416a-bf7b-ef11a47cca8e}">First name</label>
会变成 First name
<label id="{ce68e02e-e9fd-40ee-9375-ee1b05972e9b}">Phone</label>
会变成Phone
<label id="{411b580e-f7e9-4dd2-a70d-947385360cd0}">Email</label>
会变成Email
<label id="{13e2ff23-135c-4c6d-beb4-2960a533cb98}">Your Message</label>
会变成 Your Message
<label id="{c3f22c3a-8fc1-48a4-8d6a-fe346024ca2b}">Company</label>
会变成Company
我尝试了以下正则表达式 [Regex]::Match( $text, '(?s) 但它不起作用。
如有任何建议,我们将不胜感激
提前致谢
这个正则表达式可以工作,你可以使用 -replace
operator instead of the call to Regex.Replace
:
(Get-Content path\to\file -Raw) -replace '<label id="\{[\d\w-]+}">([a-z ]+)<\/label>', ''
一般是a bad idea to attempt to parse HTML with regular expressions.
而是使用专用的 HTML 解析器作为 HtmlDocument class
例子
function ParseHtml($String) {
$Unicode = [System.Text.Encoding]::Unicode.GetBytes($String)
$Html = New-Object -Com 'HTMLFile'
if ($Html.PSObject.Methods.Name -Contains 'IHTMLDocument2_Write') {
$Html.IHTMLDocument2_Write($Unicode)
} else {
$Html.write($Unicode)
}
$Html.Close()
$Html
}
$Html = ParseHtml ' # Your Html
<p>
...
<p> </p>
'
$Html.getElementsByTagName('label') |ForEach-Object { $Null = $_.removeNode() }
$Html.body.innerHtml
<P></P>
<TABLE dropzone="copy">
<TBODY>
<TR>
<TD class=label style="CURSOR: default">Full Name</TD>
<TD style="CURSOR: default">[First name] [Last name]</TD></TR>
<TR>
<TD class=label style="CURSOR: d efault">Telephone</TD>
<TD style="CURSOR: default">[Phone]</TD></TR>
<TR>
<TD class=label style="CURSOR: default">Email</TD>
<TD style="CURSOR: default">[Email]</TD></TR>
<TR>
<TD class=label style="CURSOR: default">Message</TD>
<TD style="CURSOR: default">[ Your Message]</TD></TR>
<TR>
<TD class=label style="CURSOR: default">Company</TD>
<TD style="CURSOR: default">[Company]</TD></TR></TBODY></TABLE>
<P></P>
<P></P>