You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写匹配除双位数外所有内容的正则表达式?

解决方案:匹配除连续两位数字外的所有内容

别担心,正则入门阶段遇到这类问题太正常了~针对你的需求,我整理了两种实用的方法,结合你的示例来讲解:

方法1:替换法(最实用,推荐)

既然你已经知道用\d{2}匹配连续两位数字,那最简单的方式就是把所有匹配到的双位数替换为空字符串,剩下的就是你要的内容。这种方法在大多数编程语言/工具里都能直接用,操作起来最直观。

示例演示

拿你的第一个例子:<strong>TEST</strong>22<strong>KLO4567</strong>

  • 用\d{2}全局匹配所有双位数(22、45、67),替换为空后,结果是:<strong>TEST</strong><strong>KLO</strong>

第二个例子:<strong>QE</strong>45<strong>C2C</strong>

  • 匹配并替换45后,结果是:<strong>QE</strong><strong>C2C</strong>(这里的单个数字2不属于双位数,会被保留)

第三个例子:<strong>LOP</strong>10<strong>G7G400</strong>

  • 匹配并替换10、40后,结果是:<strong>LOP</strong><strong>G7G0</strong>(单个数字7和0被保留)

不同语言的代码示例

  • Python:

    import re
    text = "<strong>TEST</strong>22<strong>KLO4567</strong>"
    result = re.sub(r'\d{2}', '', text)
    # 处理重叠双位数(比如4567要替换45和67),循环替换直到无匹配
    while re.search(r'\d{2}', result):
        result = re.sub(r'\d{2}', '', result)
    print(result)  # 输出: <strong>TEST</strong><strong>KLO</strong>
    
  • JavaScript:

    let text = "<strong>TEST</strong>22<strong>KLO4567</strong>";
    let result = text.replace(/\d{2}/g, '');
    // 处理重叠双位数
    while (/\\d{2}/.test(result)) {
        result = result.replace(/\d{2}/g, '');
    }
    console.log(result); // 输出: <strong>TEST</strong><strong>KLO</strong>
    

方法2:直接匹配法(提取目标内容)

如果你需要直接匹配所有非双位数的内容(而不是替换),可以用带环视的正则来精准匹配:

正则表达式

(?<!\d)\d(?!\d)|[^\d]

正则解释

  • (?<!\d)\d(?!\d):匹配孤立的单个数字(前后都不是数字,避免把双位数的一部分当成单个数字匹配)
  • |:逻辑“或”
  • [^\d]:匹配所有非数字字符(包括标签、字母、符号等)

示例匹配结果

对于<strong>LOP</strong>10<strong>G7G400</strong>,这个正则会匹配到:<strong>LOP</strong>、<strong>G、7、G、0,拼接后就是除双位数(10、40)外的所有内容:<strong>LOP</strong><strong>G7G0</strong>

注意事项

  • 如果你的“双位数”指的是10-99的正两位数(排除前导零),那需要把正则调整为[1-9]\d,而不是\d{2}。
  • 处理重叠双位数(比如4567)时,单次全局替换只会替换45,剩下67,所以需要循环替换直到没有匹配项。

内容的提问来源于stack exchange,提问作者user3457337

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:41:45