如何用正则表达式过滤或提取字符串中动态变化的指定数字?
针对你的两个问题,我整理了实用的正则表达式解决方案,灵活高效,刚好适配动态变化的场景:
1. 过滤字符串中动态变化数字的最简方法
提取字符串里所有数字的最简方式,绝对是用正则表达式——它能轻松应对数字位置、格式动态变化的情况。
如果是提取所有连续整数,用正则
\d+就够了:
Python实现示例:import re input_str = "用户ID: 1234,订单金额: 567" extracted_nums = re.findall(r'\d+', input_str) # 结果: ['1234', '567']JavaScript实现示例:
const inputStr = "用户ID: 1234,订单金额: 567"; const extractedNums = inputStr.match(/\d+/g); // 结果: ['1234', '567']如果需要匹配带小数点的数字,把正则改成
\d+\.?\d*即可,能同时捕获整数和小数。如果是去掉所有数字、保留其他字符,用替换操作:
Python代码示例:cleaned_str = re.sub(r'\d+', '', input_str) # 结果: "用户ID: ,订单金额: "
2. 从子字符串‘Level I (10/20)’中提取数字‘20’
结合你说的“括号内数字、Level后内容动态变化”的场景,我们可以用正则精准捕获斜杠后面的目标数字:
核心正则是 \([^)]*\/(\d+)\),拆解一下逻辑:
\(:匹配左括号[^)]*:匹配括号内斜杠前的任意非右括号字符(不管前面内容怎么变都能兼容)\/:匹配斜杠(\d+):捕获我们需要的数字(这是关键捕获组)\):匹配右括号
Python实现示例:
import re input_str = "Level I (10/20)" match_result = re.search(r'\([^)]*\/(\d+)\)', input_str) if match_result: target_num = match_result.group(1) print(target_num) # 输出: 20
如果目标数字可能是小数(比如(3.5/7.2)),只需要把正则里的 \d+ 改成 \d+\.?\d* 就行,适配更复杂的数字格式。
内容的提问来源于stack exchange,提问作者Christian Coenen




