【问题标题】:Delete all instance of variable substring between tags in Delphi删除Delphi中标签之间的变量子字符串的所有实例
【发布时间】:2012-07-18 20:46:13
【问题描述】:

我正在从 HTML 中提取可读文本到一个字符串中,我需要删除 <!----> 标记之间的现有文本。实现这一目标的最有效方法是什么?

我现在就是这样:

function RemoveIEScripts(const s: string): string;
var
  i: Integer;
  InTag: Boolean;
begin
   Result := '';
   InTag := False;
   for i := 1 to Length(s)-3 do
   begin
      if (s[i] = '<') and (s[i+1] = '!') and (s[i+2] = '-') then
         inTag := True
      else if (s[i] = '-') and (s[i+1] = '-') and (s[i+2] = '>') then
             inTag := False
           else if not InTag then
      Result := Result + s[i];
   end;
end;

有没有更好的方法来做到这一点?

【问题讨论】:

  • 从 HTML 中提取文本,省略 HTML 标签的内容是微不足道的,它已经完成了。我的问题是,有时某些网页有小脚本,例如: 提供,并且常规解析不会将它们排除在外。我知道我可以在应用常规 HTML 剥离之前重新解析以查找 序列,但我确信这不是将这些脚本排除在外的最有效方法。
  • 要做到这一点,您需要一个 HTML 解析器
  • Miguel,从 HTML 中提取可读文本的任何东西都应该已经剥离 cmets,因为它们从不包含可读文本。为什么你需要一个单独的通行证来摆脱 cmets?任何 HTML 解析器都会自动执行此操作。

标签: delphi delphi-xe


【解决方案1】:

试试这样的:

function RemoveIEScripts(const s: string): string; 
var 
  I, J: Integer; 
begin 
  Result := s; 
  I := 1;
  repeat
    I := PosEx('<!--', Result, I);
    if I = 0 then Break;
    J := PosEx('-->', Result, I+4); // 4 = Length('<!--')
    if J = 0 then Break;
    Delete(Result, I, (J+3)-I); // 3 = Length('-->')
  until False;
end; 

【讨论】:

    猜你喜欢
    • 2015-03-21
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2023-03-20
    • 2020-06-22
    • 2014-09-15
    相关资源
    最近更新 更多