从 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
语言代码:en
示例 2:
掩码:%s_resources.dll
其中一个收集到的文件名:eng_resources.dll
语言代码:英语
示例 3:
掩码:res-%s.dll
其中一个收集到的文件名:res-en.dll
语言代码:en
一般来说,这个问题在数学上是不可能解决的。
例如,考虑掩码 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
、AMask
包含零或 >1 %s
等
但你明白了。
我通过给定的掩码将资源 dll 文件名收集到 TStringList
中。到那时它工作正常。之后我想收集文件名中包含的语言代码。是否有任何 built-in
函数或格式正确的 regexp
来根据掩码获得正确的字符串部分?
示例 1:
掩码:resources_%s.dll
其中一个收集到的文件名:resources_en.dll
语言代码:en
示例 2:
掩码:%s_resources.dll
其中一个收集到的文件名:eng_resources.dll
语言代码:英语
示例 3:
掩码:res-%s.dll
其中一个收集到的文件名:res-en.dll
语言代码:en
一般来说,这个问题在数学上是不可能解决的。
例如,考虑掩码 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
、AMask
包含零或 >1 %s
等
但你明白了。