我需要使用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.
界面组件:
ListBox1
:用于显示提取的章节标题。Button1
:用于打开文件的按钮。OpenDialog1
:用于选择 TXT 文件的对话框。Button1Click 事件:
LoadChaptersFromFile
方法加载章节标题。LoadChaptersFromFile 方法:
TStringList
将文件内容按行分割。