Regex delphi X5中的怪异行为正则表达式

Regex delphi X5中的怪异行为正则表达式,regex,delphi,Regex,Delphi,我正在尝试以以下形式提取文本: 这棵树只有青苹果 a。这个人是男孩 b。这个人是个骗子 汽车开得很快 a。它是由一个疯子驾驶的 b。是一个小女孩写的 我想要所有段落的“1.这棵树只有青苹果”部分。 我的结果列表应该包含“1.这棵树只有青苹果。” 2.车开得很快“。。。我已经编写了一个正则表达式“\d{1,2}.\s(+.+?\n\n |.+?$”,并在各种引擎上进行了测试,它可以正常工作。我不明白为什么这在delphi xe 5中不起作用 以下是我使用它的代码: procedure TForm1

我正在尝试以以下形式提取文本:

这棵树只有青苹果

a。这个人是男孩

b。这个人是个骗子

汽车开得很快

a。它是由一个疯子驾驶的

b。是一个小女孩写的

我想要所有段落的“1.这棵树只有青苹果”部分。 我的结果列表应该包含“1.这棵树只有青苹果。” 2.车开得很快“。。。我已经编写了一个正则表达式“\d{1,2}.\s(+.+?\n\n |.+?$”,并在各种引擎上进行了测试,它可以正常工作。我不明白为什么这在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;

这与德尔福毫无关系。您的正则表达式不正确。它与我能找到的任何引擎中提供的文本都不匹配

给出以下文本(来自您的示例,格式正确):

1.这棵树只有青苹果。 A.这个人是男孩。 B这个人是个骗子。 2.汽车开得很快 A.它是由一个疯子驾驶的。 B是一个小女孩写的。 以下正则表达式与您指定为所需结果的两行匹配(在JGSoft、.NET、PCRE、Java、Perl、JavaScript、XMLSchema、XPath和Perl引擎中测试):

\d{1,2}\.\s*
这与德尔福毫无关系。您的正则表达式不正确。它与我能找到的任何引擎中提供的文本都不匹配

给出以下文本(来自您的示例,格式正确):

1.这棵树只有青苹果。 A.这个人是男孩。 B这个人是个骗子。 2.汽车开得很快 A.它是由一个疯子驾驶的。 B是一个小女孩写的。 以下正则表达式与您指定为所需结果的两行匹配(在JGSoft、.NET、PCRE、Java、Perl、JavaScript、XMLSchema、XPath和Perl引擎中测试):

\d{1,2}\.\s*

当您使用“各种引擎”进行测试时,您没有考虑到各种应用程序和编程语言处理换行符的方式不同。在Delphi中,
TMemo.Text
返回带有CRLF换行符的字符串。要在Delphi中匹配一个这样的换行符,您需要正则表达式
\r\n

当您使用“各种引擎”进行测试时,您没有考虑到各种应用程序和编程语言处理换行符的方式不同。在Delphi中,
TMemo.Text
返回带有CRLF换行符的字符串。要在Delphi中匹配这样一个换行符,您需要正则表达式
\r\n

非常感谢。虽然您给了我正确的表达式,但请在以下任何一个中尝试我的原始正则表达式:,以及正则表达式测试仪(Firefox插件)。对不起。不打算安装不需要的FF附加组件进行测试,这留下了两个我不知道的附加组件,并解释了我答案中的“我能找到的任何引擎”:我测试的9个是最常见的,谢谢。虽然您给了我正确的表达式,但请在以下任何一个中尝试我的原始正则表达式:,以及正则表达式测试仪(Firefox插件)。对不起。不打算安装不需要的FF附加组件进行测试,这留下了两个我不知道的附加组件,并解释了我答案中的“我能找到的任何引擎”:我测试的9个是最常见的,AFAICT。 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. \d{1,2}\.\s.*