You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用正则表达式过滤或提取字符串中动态变化的指定数字?

针对你的两个问题,我整理了实用的正则表达式解决方案,灵活高效,刚好适配动态变化的场景:

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

火山引擎 最新活动