Delphi开发小说阅读器代码示例及正则表达式使用

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

问题:

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

答案:

下面是一个使用 Delphi XE10 和 System.RegularExpressions 单元的示例代码,演示如何打开一个 TXT 文件,使用正则表达式提取章节标题,并将其输出到一个 ListBox 组件中。

首先,确保你的 Delphi 环境中已经添加了 System.RegularExpressions 单元。

以下是完整的代码示例:

unit Unit1;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.StdCtrls, System.RegularExpressions;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  private
    procedure LoadChaptersFromFile(const FileName: string);
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    ListBox1.Clear; // 清空 ListBox
    LoadChaptersFromFile(OpenDialog1.FileName);
  end;
end;

procedure TForm1.LoadChaptersFromFile(const FileName: string);
var
  FileContent: string;
  Lines: TStringList;
  Regex: TRegEx;
  Match: TMatch;
  i: Integer;
begin
  // 读取文件内容
  FileContent := TFile.ReadAllText(FileName);
  
  // 按行分割文件内容
  Lines := TStringList.Create;
  try
    Lines.Text := FileContent;

    // 定义正则表达式
    Regex := TRegEx.Create('^[  \t]{0,4}(?:序章|楔子|正文(?!完|结)|终章|后记|尾声|番外|第\s{0,4}[\d〇零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]+?\s{0,4}(?:章|节(?!课)|卷|集(?![合和])|部(?![分赛游])|篇(?!张))).{0,30}$');

    // 遍历每一行,查找匹配的章节标题
    for i := 0 to Lines.Count - 1 do
    begin
      Match := Regex.Match(Lines[i]);
      if Match.Success then
      begin
        ListBox1.Items.Add(Match.Value); // 将匹配的标题添加到 ListBox
      end;
    end;
  finally
    Lines.Free; // 释放 TStringList
  end;
end;

end.

代码说明:

  1. 界面组件

    • ListBox1:用于显示提取的章节标题。
    • Button1:用于打开文件的按钮。
    • OpenDialog1:用于选择 TXT 文件的对话框。
  2. Button1Click 事件

    • 当用户点击按钮时,打开文件对话框,选择 TXT 文件。
    • 清空 ListBox 中的内容,并调用 LoadChaptersFromFile 方法加载章节标题。
  3. LoadChaptersFromFile 方法

    • 读取选定文件的内容。
    • 使用 TStringList 将文件内容按行分割。
    • 定义正则表达式以匹配章节标题。
    • 遍历每一行,使用正则表达式查找匹配的章节标题,并将其添加到 ListBox 中。

注意事项:

  • 确保你的正则表达式符合你的需求,并根据实际情况进行调整。
  • 处理文件时,注意异常处理,以防止文件读取错误等问题。