You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi字符串数字删除及选字符坐标混淆问题技术问询

在Delphi中删除字符串里的数字

嘿,我来帮你搞定这个问题!你的需求是把字符串中所有数字都移除,比如把'105DYUDXB28DYU13'处理成'DYUDXBDYU',而你当前用固定位置截取的方法(tmpT.Put:=Trim(MidStr(S,8,6))+Trim(MidStr(S,37,3));)有个明显的局限——一旦数字的位置或数量变化,截取结果就会出错。下面给你两个更通用、靠谱的解决方案:

方法一:遍历字符筛选非数字(兼容所有Delphi版本)

这个方法很直观,逐个检查字符串里的每个字符,只保留非数字的部分。你可以写一个自定义函数来复用:

function RemoveDigits(const AInput: string): string;
var
  I: Integer;
begin
  Result := '';
  for I := 1 to Length(AInput) do
  begin
    // Delphi XE7及以上版本可以直接用IsDigit方法
    if not AInput[I].IsDigit then
      Result := Result + AInput[I];
    // 如果是XE7之前的版本,换成下面的判断:
    // if not (AInput[I] in ['0'..'9']) then
    //   Result := Result + AInput[I];
  end;
end;

使用的时候直接调用这个函数就行,完全不用关心数字的位置:

tmpT.Put := RemoveDigits(S); // S就是你的原始字符串'105DYUDXB28DYU13'

方法二:用正则表达式(Delphi XE及以上版本)

如果你用的是Delphi XE或更高版本,可以用正则表达式来快速实现,代码更简洁:

首先需要引用RegularExpressions单元,然后一行代码搞定:

uses RegularExpressions;

// 把所有数字(\d匹配任意数字)替换为空字符串
tmpT.Put := TRegex.Replace(S, '\d', '');

这个方法效率很高,适合处理复杂的字符串处理场景,而且代码量极少。

关于你当前代码的说明

你现在用的MidStr固定位置截取方法,只适用于字符串格式完全固定的情况(比如数字的位置和数量永远不变)。但如果字符串里的数字数量或位置有变化,这种方法就会失效。上面的两种方法都是通用解决方案,不管数字在哪里、有多少,都能准确提取所有非数字字符,完美匹配你的需求。

内容的提问来源于stack exchange,提问作者delphi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:55:54