6

我想检索字符串列表中的行号(从文件加载)。Indexof 似乎完全匹配。有没有办法使用通配符版本的 Indexof 检索行?像 SL.Indexof('?sometext') 之类的东西?

谢谢!

4

3 回答 3

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;

ContainsStrContainsTextStrUtilsRTL 单元中定义并遵循标准约定Str来指示区分大小写的比较,并Text指示不区分大小写。

于 2011-06-14T09:44:59.660 回答
7

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

于 2011-06-14T09:18:41.480 回答
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;
于 2020-04-18T17:59:05.837 回答