delphi - 查找并删除字符串的模式(Delphi)

标签 delphi

我有一个很大的字符串......原始文本是这样的:

'Lorem ipsum dolor sit amet, consectetur adipiscing  <a href="hxxp://www.youtube.com/watch?v=VIDEO_1">hxxp://www.youtube.com/watch?v=VIDEO_1</a>
Sed lacinia purus turpis. Curabitur in nisi urna, vitae aliquet
Vestibulum ante ipsum primis in faucibus orci luctus hxxp://www.youtube.com/watch?v=VIDEO_2</a>'

如果您发现某个视频 (VIDEO_2) 的结尾为 而没有打开 这些有问题的视频可能位于原始文本中的任意位置和任意数量。

我想删除那些不必要的 我如何检测并删除它们?

我使用的是 Delphi XE4。 请问有什么帮助吗?

最佳答案

我相信以下代码可以有效地工作:

function RemoveLonelyClosingATags(const S: string): string;
var
  level: integer;
  i: Integer;
  ActualLength: integer;
begin
  level := 0;
  SetLength(result, Length(S));
  ActualLength := 0;
  i := 1;
  while i <= Length(S) do
  begin
    if (S[i] = '<') and (UpperCase(Copy(S, i, 4)) = '</A>') then
    begin
      if Level = 0 then
      begin
        inc(i, 4);
        Continue;
      end
      else
        dec(Level);
    end;

    inc(ActualLength);
    result[ActualLength] := S[i];
    if (S[i] = '<') and (i < Length(S)) and (UpperCase(S[i+1]) = 'A') then
    begin
      inc(Level);
      if Level > 1 then
        raise Exception.Create('Nested A tags detected.');
    end;
    inc(i);

  end;
  SetLength(result, ActualLength);
end;

关于delphi - 查找并删除字符串的模式(Delphi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16759271/

相关文章:

将此 C 代码转换为 Delphi 代码

delphi - 为什么我的键盘 Hook 多次收到相同的按键向上和按键按下事件?

java - 如何发送一个字符串,使用java套接字作为客户端和delphi indy tcpserver作为服务器

delphi - 从TWebRequest的内容字段读取unicode字符串

c# - 什么是 C# 中的 Delphi "shl"?

delphi - 如何在Delphi中表示坐标网格?

c++ - 获取 Windows 句柄的 WNDPROC

delphi - 在 Delphi 中,将一个对象转换为它的父对象会占用更多的内存吗?

delphi - 向右滚动文本

c# - 如何在 c# 中的打包记录中读取固定大小字符串的 Delphi 数组