使用 TRegEx 删除 HTML 标签之间的字符串
Remove string between HTML tags with TRegEx
我正在通过代码设计使用 HTML 格式通过电子邮件发送的报告。
为此,我首先加载一个 HTML 模板,我可以在其中使用预定义标签插入所有动态部分,例如 [CustomerName].
<p>You will find below reports for customer [CustomerName] dated [ReportdDate]</p>
<tag-1>
<h3>TableTitleA</h3>
<table>
<thead id="t01">
<tr>
<th align='center' width='80'>Order Nr</th>
<th align='left' width='400'>Date</th>
<th align='left' width='200'>Info</th>
<th align='center' width='200'>Site Name</th>
</tr>
</thead>
<tbody>
[TableA]
</tbody>
</table>
</tag-1>
<tag-2>
<h3>TableTitleB</h3>
<table>
<thead id="t01">
<tr>
<th align='center' width='80'>Order Nr</th>
<th align='left' width='100'>Date</th>
<th align='left' width='400'>Info</th>
<th align='left' width='200'>Site Name</th>
</tr>
</thead>
<tbody>
[TableB]
</tbody>
</table>
</tag-2>
<p>Best regards</p>
此模板已准备好插入两个 HTML table:[TableA] 和 [TableB]
但有时table没有数据。所以,我想删除完整的 HTML 部分。为此,我插入了假标签:
<tag-1></tag-1> and <tag-2></tag-2>
然后使用 TRegEx 删除包含两个伪造标签的完整部分。这在这里工作得很好:
https://regex101.com/r/5OFlyC/1
但是 Delphi 中的这段代码没有按预期工作:
TRegEx.Replace(MessageBody.Text, '<tag-1>.*?</tag-1>', '');
你能告诉我这里有什么问题吗?
我的问题已解决。感谢大家
首先,您必须从字符串中删除所有 CR LF,然后在 < 和 >
之前使用带有转义符的表达式
S:=StringReplace(messagebody.Text,#13#10,'<br>',[rfReplaceAll]);
S:=TRegEx.Replace(S,'(\<tag-1\>.*?\<\/tag-1\>)','');
messagebody.text:=StringReplace(S,'<br>',#13#10,[rfReplaceAll]);
只需使用roSingleLine
选项来处理换行:
MessageBody.Text := TRegEx.Replace(MessageBody.Text, '<tag-1>.*?</tag-1>', '', [roSingleLine]);
我正在通过代码设计使用 HTML 格式通过电子邮件发送的报告。
为此,我首先加载一个 HTML 模板,我可以在其中使用预定义标签插入所有动态部分,例如 [CustomerName].
<p>You will find below reports for customer [CustomerName] dated [ReportdDate]</p>
<tag-1>
<h3>TableTitleA</h3>
<table>
<thead id="t01">
<tr>
<th align='center' width='80'>Order Nr</th>
<th align='left' width='400'>Date</th>
<th align='left' width='200'>Info</th>
<th align='center' width='200'>Site Name</th>
</tr>
</thead>
<tbody>
[TableA]
</tbody>
</table>
</tag-1>
<tag-2>
<h3>TableTitleB</h3>
<table>
<thead id="t01">
<tr>
<th align='center' width='80'>Order Nr</th>
<th align='left' width='100'>Date</th>
<th align='left' width='400'>Info</th>
<th align='left' width='200'>Site Name</th>
</tr>
</thead>
<tbody>
[TableB]
</tbody>
</table>
</tag-2>
<p>Best regards</p>
此模板已准备好插入两个 HTML table:[TableA] 和 [TableB]
但有时table没有数据。所以,我想删除完整的 HTML 部分。为此,我插入了假标签:
<tag-1></tag-1> and <tag-2></tag-2>
然后使用 TRegEx 删除包含两个伪造标签的完整部分。这在这里工作得很好:
https://regex101.com/r/5OFlyC/1
但是 Delphi 中的这段代码没有按预期工作:
TRegEx.Replace(MessageBody.Text, '<tag-1>.*?</tag-1>', '');
你能告诉我这里有什么问题吗?
我的问题已解决。感谢大家
首先,您必须从字符串中删除所有 CR LF,然后在 < 和 >
之前使用带有转义符的表达式 S:=StringReplace(messagebody.Text,#13#10,'<br>',[rfReplaceAll]);
S:=TRegEx.Replace(S,'(\<tag-1\>.*?\<\/tag-1\>)','');
messagebody.text:=StringReplace(S,'<br>',#13#10,[rfReplaceAll]);
只需使用roSingleLine
选项来处理换行:
MessageBody.Text := TRegEx.Replace(MessageBody.Text, '<tag-1>.*?</tag-1>', '', [roSingleLine]);