使用 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]);