繁体   English   中英

从 Delphi 10.3 中的字符串中减去掩码

[英]Subtract a mask from a string in Delphi 10.3

我通过给定的掩码将资源 dll 文件名收集到TStringList 它工作正常。 之后我想收集文件名包含的语言代码。 是否有任何built-in函数或格式良好的正则regexp来根据掩码获得正确的字符串部分?

示例 1:

掩码:resources_%s.dll

收集的文件名之一:resources_en.dll

语言代码 : zh

示例 2:

掩码:%s_resources.dll

收集的文件名之一:eng_resources.dll

语言代码 : eng

示例 3:

掩码 : res-%s.dll

收集的文件名之一:res-en.dll

语言代码 : zh

一般来说,这个问题在数学上是不可能解决的。

例如,考虑掩码alpha_%s_beta_%s_gamma和输出alpha_cat_beta_beta_dog_gamma

第一个值可能是cat ,第二个值是beta_dog ,但也可能是第一个值是cat_beta而第二个值是dog 所以必须提供额外的信息。

例如,如果您知道掩码始终包含%s一 (1) 个实例,那么问题就很容易解决。 例如(省略所有错误检查):

function GetValueFromMask(const AMask, AText: string): string;
var
  p: Integer;
begin
  p := Pos('%s', AMask);
  Result := Copy(AText, p, 2 + AText.Length - AMask.Length);
end;

当然,您永远不会在生产中使用该代码。 您将添加错误检查,确保处理AText不匹配AMask 、包含零或 >1 %s AMask等。

但是你明白了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM