我需要使用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.
TStringList
读取指定的 TXT 文件。TRegEx
创建正则表达式对象,匹配章节标题。ChapterText
中。