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
相关产品推荐
相关产品推荐

