Delphi小说阅读器正则表达式章节提取代码

使用 GPT-4o Mini 回答,作者 GPT4oMini.app

问题:

我需要使用delphi开发小说阅读器,需要使用正则表达式将txt的小说文档进行分割,提取标题和小说章节文本,我的小说章节标题的正则表达式为:^[  \t]{0,4}(?:序章|楔子|正文(?!完|结)|终章|后记|尾声|番外|第\s{0,4}[\d〇零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]+?\s{0,4}(?:章|节(?!课)|卷|集(?![合和])|部(?![分赛游])|篇(?!张))).{0,30}$,请输出详细代码

答案:

在 Delphi 中使用正则表达式来处理文本文件并提取小说章节标题和文本,可以使用 TRegEx 类。以下是一个示例代码,展示如何读取一个 TXT 文件,使用正则表达式分割章节标题和文本,并将结果输出到控制台。

首先,确保你在 Delphi 中启用了 System.RegularExpressions 单元。

uses
  System.SysUtils, System.Classes, System.RegularExpressions;

procedure ExtractChapters(const FileName: string);
var
  FileContent: TStringList;
  ChapterRegex: TRegEx;
  Match: TMatch;
  i: Integer;
  ChapterTitle: string;
  ChapterText: string;
begin
  // 读取文件内容
  FileContent := TStringList.Create;
  try
    FileContent.LoadFromFile(FileName);
    
    // 正则表达式
    ChapterRegex := TRegEx.Create('^[  \t]{0,4}(?:序章|楔子|正文(?!完|结)|终章|后记|尾声|番外|第\s{0,4}[\d〇零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]+?\s{0,4}(?:章|节(?!课)|卷|集(?![合和])|部(?![分赛游])|篇(?!张))).{0,30}$');

    ChapterText := '';
    for i := 0 to FileContent.Count - 1 do
    begin
      Match := ChapterRegex.Match(FileContent[i]);
      if Match.Success then
      begin
        // 如果找到章节标题,输出之前的章节内容
        if ChapterTitle <> '' then
        begin
          Writeln('章节标题: ' + ChapterTitle);
          Writeln('章节内容: ' + ChapterText);
          Writeln('-------------------------');
        end;

        // 更新章节标题和内容
        ChapterTitle := Match.Value;
        ChapterText := '';
      end
      else
      begin
        // 如果没有找到标题,继续累积章节内容
        ChapterText := ChapterText + FileContent[i] + sLineBreak;
      end;
    end;

    // 输出最后一章的内容
    if ChapterTitle <> '' then
    begin
      Writeln('章节标题: ' + ChapterTitle);
      Writeln('章节内容: ' + ChapterText);
    end;

  finally
    FileContent.Free;
  end;
end;

begin
  try
    ExtractChapters('path_to_your_novel.txt'); // 替换为你的小说文件路径
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

代码说明:

  1. 读取文件:使用 TStringList 读取指定的 TXT 文件。
  2. 正则表达式:使用 TRegEx 创建正则表达式对象,匹配章节标题。
  3. 循环处理:遍历文件的每一行,检查是否匹配章节标题。
    • 如果匹配到标题,输出之前的章节内容。
    • 如果没有匹配到标题,则将当前行内容累积到 ChapterText 中。
  4. 输出结果:在控制台输出章节标题和对应的章节内容。

注意事项:

  • 请确保文件路径正确。
  • 根据需要调整正则表达式以适应不同格式的章节标题。
  • 该代码在控制台应用程序中运行,适合用于调试和测试。