删除Delphi中标记之间变量子字符串的所有实例

删除Delphi中标记之间变量子字符串的所有实例,delphi,delphi-xe,Delphi,Delphi Xe,我正在将可读文本从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] = '&

我正在将可读文本从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;
函数removiedescripts(const s:string):string;
变量
i:整数;
InTag:布尔型;
开始
结果:='';
InTag:=假;
对于i:=1到长度(s)-3 do
开始
如果(s[i]='',则
inTag:=假
否则,如果不是InTag那么
结果:=结果+s[i];
结束;
结束;

有更好的方法吗?

试试这样的方法:

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; 
函数removiedescripts(const s:string):string;
变量
一、 J:整数;
开始
结果:=s;
I:=1;
重复
I:=PosEx(“”,结果,I+4);//4=长度(“”)
直到错误;
结束;

试试这些问题,从HTML中提取文本,忽略HTML标记的内容是很简单的,而且已经完成了。我的问题是,有时候有些网页会有一些小脚本,比如:而常规解析不会忽略它们。我知道我可以在应用常规HTML剥离之前重新解析查找序列,但我确信这不是删除这些脚本的最有效方法。要做到这一点,您需要一个HTML解析器,从HTML中提取可读文本的任何内容都应该已经剥离注释,因为它们从不包含可读文本。为什么你需要一个单独的通行证来清除评论?任何HTML解析器都会自动执行此操作。