我正在尝试提取表单中的文字:
1.树上只有青苹果。
一个。这个人就是男孩。
湾这个人是个骗子。
2.汽车开得非常快。
一个。它是由一个疯子驱动的。
湾这是一个小女孩。
我想要" 1.树只有青苹果。"所有段落的一部分。 我的结果列表应包含" 1.树只有青苹果。"," 汽车开得非常快" ...我写了一个正则表达式" \ d {1,2}。\ s(。+?\ n \ n |。+?$)&#34 ;并在各种引擎上进行测试并且有效。我不明白为什么这在delphi xe 5中不起作用。
以下是我使用它的代码:
procedure TForm1.btSearch;
var
regex: TRegEx;
i, j: integer;
mygrps: TGroupCollection;
begin
regex:= TRegEx.Create(edit1.text);
mycoll:= regex.Matches(memo1.text);
if mycoll.Count>0 then
begin
label2.caption:= 'Count: ' + IntToStr(mycoll.Count);
memo2.Lines.Add('First Collection: ');
for i := 0 to mycoll.Count-1 do
begin
memo2.Lines.Add('Match #' + IntToStr(i) + ': ' + mycoll.Item[i].Value);
memo2.Lines.Add('Group: ' + IntToStr(i));
mygrps:= mycoll.Item[i].Groups;
for j := 0 to mygrps.Count-1 do
begin
memo2.Lines.Add('Value: ' + mygrps.Item[j].Value);
end;
end;
end;
end;
答案 0 :(得分:3)
这与Delphi毫无关系。您的正则表达式似乎不正确。它与我能找到的任何引擎中提供的文本都不匹配。
给出以下文字(来自您的样本,格式正确):
1. The tree has only green apples. a. the person is boy. b. the person is a liar. 2. The car drove very fast a. it was driven by a mad man. b. it was by a little girl.
以下正则表达式匹配您指定为所需结果的两行(在JGSoft,.NET,PCRE,Java,Perl,JavaScript,XMLSchema,XPath和Perl引擎中测试):
\d{1,2}\.\s.*
答案 1 :(得分:2)
当您使用“各种引擎”进行测试时,您没有考虑到各种应用程序和编程语言以不同方式处理换行符。在Delphi中,TMemo.Text
返回带有CRLF换行符的字符串。要在Delphi中匹配一个这样的换行符,您需要正则表达式\r\n
。