如何用单次正则替换提取指定位置子串并去除前导零
单次正则替换实现需求的方案
最终正则配置
- 匹配正则:
^.{48}0*([1-9]\d*).* - 替换字符串:
$1
如果需要兼容目标10位全为零的场景,可将匹配正则调整为^.{48}0*(0|[1-9]\d*).*,避免捕获结果为空。
实现原理
- 匹配逻辑拆解:
^.{48}:匹配字符串开头的前48个字符,直接跳过不需要的前缀内容0*:匹配第49位开始的目标10位子串的所有前导零,该部分不做捕获([1-9]\d*):捕获目标子串中从第一个非零数字开始的剩余有效数字,即去前导零后的结果.*:匹配目标10位子串之后的所有剩余内容,直接忽略
- 替换时直接输出捕获组
$1的内容,单次替换即可得到目标结果
验证效果
输入你的原始字符串:
020075307354H 021133360876 981497910079937800ABC CDE FGH THY 0M19780403015001O+2¹qujzh_¢o\piVN¤«²µerNA¥\^?©E|=V_®¢Zu<£;Æ^TV½IÌc¤±·Gl.ÁEÊO·9y¹Bs¾Ë©ºFT¥*ÉA¬=iÚÒ®{æ*»¨;ÄNÕ®Ûòæ¦'Ñ…9>ÙYKè¹t/R{(>ÔÕBã2½7q¹|u…nztf~¦spw_ZX£\¦~Qa²mn¡¨QX«W±¯¯¦¨d£¾}·`B¶M}Qc|AµOÇ~Äd¤·¯HÇaI_¶²ÂÆYC?xÄR²>½HpÃjÁNLifm@ÕEí¾)ZvÇÊzØ)D&¦áÑM¡ç…1F¥Åh9R[9Fä¤Ãå<÷¼T}Ã…©ÎCDNs«E`É?¤eñ/ï´¯Åíÿt
替换后输出结果为79937800,完全符合要求。
内容的提问来源于stack exchange,提问作者MrWeix
相关产品推荐
相关产品推荐

