0

我想通过使用(我在 Delphi XE4 和 XE5 中编码)从以下文本中提取SAAM和提取:SAAMIRegEX

RegEx = 'Name:\s?(.*),Family:\s?(.*)';

例如我有这个文本:

Name: SAAM
Family: SAAMI

我写了这段代码,并使用了匹配两个正则表达式(And )的MatchAgain方法。TPerlRegEx'Name:\s?(.*)''Family:\s?(.*)'

...
var
  RX: TPerlRegEx;
const
  RegEx = 'Name:\s?(.*),Family:\s?(.*)';
begin
  RX := TPerlRegEx.Create;
  try
    RX.RegEx := RegEx;
    RX.Subject := mmo1.Text;// The mmo1.text value is "Name: SAAM and Family: SAAMI"
    if RX.Match then
    begin
      repeat
        ShowMessage('Name is :' + RX.Groups[1]);
        ShowMessage('Family is :' + RX.Groups[2]);
      until not RX.MatchAgain;
    end;
  finally
    RX.Free;
  end;
...

为什么这段代码不起作用?

4

1 回答 1

3

我把我的代码改成了这个,它对我来说是正确的(几乎:-))。

示例文本:

  Junk text :-)
  Junk text :-)
  Junk text :-)
Name: SAAM
  Junk text :-)
  Junk text :-)
  Junk text :-)
  Junk text :-)
  Junk text :-)
Family: SAAMI
  Junk text :-)
  Junk text :-)
  Junk text :-)

新代码:

var
  RX: TPerlRegEx;
  i: Integer;
const
  RegEx = 'Name:\s?(.*)|Family:\s?(.*)';
begin
  i := 1;
  RX := TPerlRegEx.Create;
  try
    RX.RegEx := RegEx;
    RX.Subject := mmo1.Text;
    if RX.Match then
    begin
      repeat
        case i of
          1:
            ShowMessage('Name is: ' + RX.Groups[i]);
          2:
            ShowMessage('Family is: ' + RX.Groups[i]);
        end;

        Inc(i);
      until not RX.MatchAgain;
    end;
  finally
    RX.Free;
  end;

结果:

Name is: SAAM
Family is: SAAMI
于 2013-11-06T10:25:25.267 回答