我需要使用delphi开发小说阅读器,需要使用正则表达式将txt的小说文档进行分割,提取标题和小说章节文本,我的小说章节标题的正则表达式为:^[ \t]{0,4}(?:序章|楔子|正文(?!完|结)|终章|后记|尾声|番外|第\s{0,4}[\d〇零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]+?\s{0,4}(?:章|节(?!课)|卷|集(?![合和])|部(?![分赛游])|篇(?!张))).{0,30}$,delphi xe 10 中 perlregex在System.RegularExpressionsCore中,使用opendialog打开txt文件,将标题输出到一个listbox组件中,请输出详细代码
procedure TForm4.btn2Click(Sender: TObject); begin if dlgOpen1.Execute then begin ParseNovel(dlgOpen1.FileName, lst1); end; end;
procedure ParseNovel(txtFilePath: string; ListBox: TListBox);
下面是一个使用 Delphi XE 10 中的 System.RegularExpressions
单元来解析小说文本文件的示例代码。该代码会打开一个文本文件,使用正则表达式提取章节标题,并将其添加到 TListBox
组件中。
首先,请确保在你的 Delphi 项目中添加了 System.RegularExpressions
单元。
以下是完整的代码示例:
uses
System.SysUtils, System.Classes, System.RegularExpressions, Vcl.Dialogs, Vcl.StdCtrls;
procedure TForm4.btn2Click(Sender: TObject);
begin
if dlgOpen1.Execute then
begin
ParseNovel(dlgOpen1.FileName, lst1);
end;
end;
procedure ParseNovel(txtFilePath: string; ListBox: TListBox);
var
FileStream: TFileStream;
StreamReader: TStreamReader;
Line: string;
Regex: TRegEx;
Match: TMatch;
begin
// 清空 ListBox
ListBox.Clear;
// 正则表达式
Regex := TRegEx.Create('^[ \t]{0,4}(?:序章|楔子|正文(?!完|结)|终章|后记|尾声|番外|第\s{0,4}[\d〇零一二两三四五六七八九十百千万壹贰叁肆伍陆柒捌玖拾佰仟]+?\s{0,4}(?:章|节(?!课)|卷|集(?![合和])|部(?![分赛游])|篇(?!张))).{0,30}$');
// 打开文件
FileStream := TFileStream.Create(txtFilePath, fmOpenRead or fmShareDenyWrite);
try
StreamReader := TStreamReader.Create(FileStream, TEncoding.UTF8);
try
// 逐行读取文件
while not StreamReader.EndOfStream do
begin
Line := StreamReader.ReadLine;
// 匹配正则表达式
Match := Regex.Match(Line);
if Match.Success then
begin
// 将匹配的标题添加到 ListBox
ListBox.Items.Add(Line);
end;
end;
finally
StreamReader.Free;
end;
finally
FileStream.Free;
end;
end;
btn2Click:当用户点击按钮时,打开文件对话框,选择一个文本文件,并调用 ParseNovel
函数进行解析。
ParseNovel:
ListBox
中的内容。Regex
,用于匹配章节标题。TFileStream
打开指定的文本文件,并使用 TStreamReader
逐行读取文件内容。ListBox
中。Vcl.Dialogs
和 Vcl.StdCtrls
单元,以便使用对话框和列表框组件。