如何用正则表达式提取行末最后一个0之后的数字?
正则提取每行末尾最后一个0后的数字
输入内容
DEFE0000458 sdqsd000254 qdqsdq012525 qsdqs000125 012254104564 00012540001 00026a000a0
需求
提取每行末尾最后一个0之后的连续数字,预期结果如下:
458 254 12525 125 4564 1 no match
你当前使用的(\d+[^0])$逻辑存在问题:它要求末尾是非0字符加数字,既没法处理末尾只有单个数字的情况(比如第六行的1),也没考虑目标数字前的连续0序列,所以无法满足需求。
正确正则表达式
使用正则:0*(\d+)$
逻辑解释
0*:匹配目标数字之前的所有末尾连续0(可以是0个,比如第五行里最后一个0直接衔接数字的情况)(\d+)$:捕获行末尾的连续数字,这部分就是最后一个0之后的目标内容
匹配验证
对应每行的结果:
- DEFE0000458 → 捕获
458(目标数字前有4个0) - sdqsd000254 → 捕获
254(目标数字前有3个0) - qdqsdq012525 → 捕获
12525(目标数字前有1个0) - qsdqs000125 → 捕获
125(目标数字前有3个0) - 012254104564 → 捕获
4564(目标数字前有1个0) - 00012540001 → 捕获
1(目标数字前有3个0) - 00026a000a0 → 末尾最后一个字符是0,但后续无数字,且前置字符为字母,无法匹配有效数字,返回
no match
如果需要严格确保目标数字前存在至少一个0(比如排除行开头就是无0数字的情况),可以调整为.*0(\d+)$,但你的输入场景下0*(\d+)$已足够简洁覆盖所有需求。
内容的提问来源于stack exchange,提问作者pasqal
相关产品推荐
相关产品推荐

