regex - 搜索书籍名称的正则表达式 (Delphi 7 & DiRegEx 8.8.1)
问题描述
我正在使用 Delphi 7,这是我第一次使用库 DiRegEx。我需要做的是收集列表中书籍的名称。该列表很长,但要知道它看起来像这样:
2 Tesalonickým 3:14 2 Tesalonickým 3:15 2 Tesalonickým 3:16 2 Tesalonickým 3:17 2 Tesalonickým 3:18 1 Timoteovi 1:1 1 Timoteovi 1:2 1 Timoteovi 1:3 1 Timoteovi 1:4
所以我想通过 RegEx.Match 找到的是“2 Tesalonickým”和“1 Timoteovi”字符串。所以我想搜索^some string\d\d?\d?:\d\d?\d?
...
我的代码是:
var
contents : TStringList;
RegEx: TDIRegEx;
WordCount: Integer;
s:string;
begin
Contents := TStringList.Create;
RegEx := TDIPerlRegEx.Create{$IFNDEF DI_No_RegEx_Component}(nil){$ENDIF};
Contents.LoadFromFile('..\reference dlouhé CS.txt');
for i:=0 to Contents.count-1 do
begin
Contents[i];
try
RegEx.SetSubjectStr(Contents[i]);
RegEx.MatchPattern := '\w+';
WordCount := 0;
if RegEx.Match(0) >= 0 then
begin
repeat
Inc(WordCount);
s := RegEx.MatchedStr;
WriteLn(WordCount, ' - ', s);
until RegEx.MatchNext < 0;
end;
finally
RegEx.Free;
end; // end try
end; // end for
end;
而且我需要修改正则表达式,因此\d\d?\d?:\d\d?\d?
不会出现在结果中,而应该是“锚”或“针”。如何制作正则表达式?
结果:
这是 UTF-8 格式的 66 本书的完整列表。\w 模式存在一些问题,因为它不包括像 Ž 或 š 这样的字符。
创世纪;出埃及记;利未记;Numeri;氘代;Jozue;Soudců;Rút;1 Samuelova;2 Samuelova;1 Královská;2 Královská;1 Paralipomenon;2 Paralipomenon;Ezdráš;Nehemjáš;Ester;Jób;Žalmy;Přísloví;Kazatel;Píseň písní ;Izajáš;Jeremjáš;Pláč;Ezechiel;Daniel;Ozeáš;Jóel;Ámos;Abdijáš;Jonáš;Micheáš;Nahum;Abakuk;Sofonjáš;Ageus;Zacharjáš;Malachiáš;Matouš;Marek;Lukáš;Jan;Skutky apoštolské;Řmímanům ;2 Korintským;Galatským;Efezským;Filipským;Koloským;1 Tesalonickým;2 Tesalonickým;1 Timoteovi;2 Timoteovi;Titovi;Filemonovi;Židům;Jakubův;1 Petrův;2 Petrův;1 Janův;2 Janův;3 Janův;Judjevenův;亚诺沃;
解决方案
您可以使用
(*UCP)^(?:\d+\s+)?\w+(?=\s+\d\d?\d?:\d)
或者
(*UCP)^(?:\d+\s+)?\w+(?=\s+\d{1,3}:\d)
模式开始处的A (*UCP)
(PCRE 动词)使所有速记都可以识别 Unicode。
模式匹配
^
- 字符串的开头(?:
- 非捕获组的开始\d+
- 1+位数,\s+
- 1+空格和
)?
- 非捕获组结束,1 或 0 次出现(?
使其可选)\w+
- 1+字字符...(?=\s+\d{1,3}:\d)
- 后跟 1+ 个空格、1 到 3 位数字:
和一个数字。
请参阅正则表达式演示。
如果您只需要匹配字母,则\w
可能需要替换为。\p{L}
推荐阅读
- python - 如何修复 chirpsdk.exceptions.ConnectError:使用 chirp python 平台时出现未知错误代码异常?
- docker - Compose 文件 './docker-compose.yml' 无效,因为:不支持的配置选项
- shell - linux中停止进程的状态并发送电子邮件
- linux - 构建交叉编译器:pthread.h:没有这样的文件或目录
- laravel - 如何在 Laravel 中使用 Jcrop
- reactjs - 如何从不直接处理状态管理的 reactstrap 为 UncontrolledTooltip 创建一个单元测试?
- asp.net - 无法通过 WSL 运行 .NET Core Angular 应用程序
- ibm-watson - 如何索引内容节点中的 XML 数据?
- r - 删除仅通过比较行来明确关系的重复项(R中的相对参考)
- python - 如何在 React Native 中使用 SQLAlchemy 数据库?