如何匹配查找字符串

fbiboss 2012-02-03 02:49:46
比如有一个文本中,有一句 “你是第122名”,122是不确定的,有没有快速的方法能找出这一句?
最好是这样的,用 你是第*名,然后自动就把这一句读取出来了或者是读出122
...全文
79 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
s11ss 2012-02-03
  • 打赏
  • 举报
回复
procedure TForm1.FormCreate(Sender: TObject);
function SearchIt(Src: PChar): PChar;
var
P: PChar;
label _notFound;
begin
P := AnsiStrPos(Src, PChar('你是第'));
if P = nil then goto _notFound;
Result := P;

Inc(P, 6);
while P^ in ['0'..'9'] do Inc(P);
if (P - Result = 6) or (P <> AnsiStrPos(P, '名')) then goto _notFound;

Exit;

_notFound:
Result := nil
end;

var
S: string;
begin
S := SearchIt('aaa你是第123名');//返回“你是第123名”
S := SearchIt('aaa你是第a123名');//返回空
ShowMessage(S);
end;
Henry.6 2012-02-03
  • 打赏
  • 举报
回复
把edt4.Text换为‘你是第(\d+)名’
Henry.6 2012-02-03
  • 打赏
  • 举报
回复
正则表达式可以查出
你是第(\d+)名

------

procedure TForm1.btn7Click(Sender: TObject);
var
reg : TPerlRegEx;
i ,j,k: Integer;
StrArr : TStringDynArray;
tmpStr : String;
pStr : WideString;
tsl : TStringList;
strQuery : String;
strcondition : String;
begin
StrArr := nil;

pStr := edt4.Text;
tsl := TStringList.Create;
reg := TPerlRegEx.Create(nil);
try

reg.RegEx := edt4.Text;
reg.Options := [preSingleLine];
reg.Subject := WideString(mmo3.Text);
tmpStr := '';
if reg.Match then
begin
repeat
tmpStr := tmpStr + reg.MatchedExpression + ' ';

until not reg.MatchAgain ;
end;


mmo4.Lines.Text := tmpStr;

finally
reg.Free;
tsl.Free;
end;


end;

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧