正则匹配需求:提取最后一个0后的有效数字(全0返回0)
正则表达式提取目标数字的解决方案
需求明确
根据你提供的示例数据和预期结果,实际需求可明确为:
- 提取字符串中最后一个“后面跟随非0数字”的0之后的所有数字(包含后续的0)
- 如果所有0之后均为0(即没有0后面跟着非0数字),则返回
0
正确正则表达式及用法
正则模式
使用贪婪匹配的正则表达式捕获目标内容:
.*0([1-9]\d*)
逻辑说明
.*0:贪婪匹配到字符串中最后一个“后面跟着非0数字”的0(因为[1-9]要求后面必须有非0数字,所以会自动跳过末尾全是0的那些0)([1-9]\d*):捕获该0之后的所有数字,第一个字符是非0数字,后续可以是任意数字(包括0)
处理步骤
- 对每个字符串,使用上述正则进行匹配
- 若匹配成功,直接返回捕获组的内容(即
\1) - 若匹配失败(说明所有0之后都是0),返回
0
代码示例(Python)
import re def extract_target(s): match = re.fullmatch(r'.*0([1-9]\d*)', s) if match: return match.group(1) return '0' # 测试你的数据 data = [ "0100179835", "3000766774", "1500396843", "1500028408", "1508408637", "3105230262", "3005228061", "3105228407", "3105228940", "0900000000", "2100000000", "0800000000", "1000000001", "2200000001", "0800000001", "1300000001", "1000000002", "2200000002", "0800000002", "1300000002", "1000000003", "2200000003", "0800000003", "1300000003", "1000000004", "2200000004", "0800000004", "1300000004", "1000000005", "2200000005", "0800000005", "1300000005", "1000000006", "2300000006", "0800000006", "0900000006", "1000000007", "2300000007", "0900000007", "0800000007", "1000000008", "2300000008", "0900000008", "0800000008", "1100000009", "2300000009", "0900000009", "0800000009", "1000005217", "2000000429", "1100000020", "1000005000", "3000000070", "2000000400", "1000020000", "3000200000", "2906000000" ] for s in data: print(extract_target(s))
结果验证
运行上述代码会输出你提供的预期结果,例如:
0900000000→01100000020→201000005000→50002906000000→6000000
内容的提问来源于stack exchange,提问作者Juan Tamad
相关产品推荐
相关产品推荐

