簡體   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