TStringList.IndexOf:indexof中的通配符?

时间:2011-06-14 09:15:05

标签: delphi indexof

我想检索字符串列表中的linenumber(从文件加载)。 Indexof似乎与完全匹配。有没有办法检索带有通配符版本的Indexof的行?类似于SL.Indexof('?sometext')?

谢谢!

3 个答案:

答案 0 :(得分:9)

如果你想匹配字符串的某些部分,没有任何花哨的通配符,就像你在另一个答案的注释中指出的那样,那么你可以使用这样一个简单的函数:

function FindMatchStr(Strings: TStrings; const SubStr: string): Integer;
begin    
  for Result := 0 to Strings.Count-1 do
    if ContainsStr(Strings[Result], SubStr) then
      exit;
  Result := -1;
end;

如果您想要不区分大小写的匹配,那么您可以使用:

function FindMatchText(Strings: TStrings; const SubStr: string): Integer;
begin    
  for Result := 0 to Strings.Count-1 do
    if ContainsText(Strings[Result], SubStr) then
      exit;
  Result := -1;
end;

ContainsStrContainsTextStrUtils RTL单元中定义,并遵循Str的标准惯例以表示区分大小写的比较,并Text表示不区分大小写。

答案 1 :(得分:7)

没有内置的搜索TStringList通配符的方法。您需要使用第三方库,例如TPerlRegEx来表示正则表达式。

答案 2 :(得分:0)

适应David Heffernan的响应以与TStringList一起使用,该函数应如下所示:

function Util_StrLst_GetLineFromSubstr(iStrlst: TStringList; iSubstr: string): Integer;
begin
  for Result := 0 to iStrlst.Count-1 do
    if (Pos(iSubstr, iStrlst[Result]) > 0) then
      Exit;
  Result := -1;
end;