[英]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.