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

正则表达式匹配特定数字时过度匹配的问题及解决需求

解决正则过度匹配问题的方案

你的核心问题是要匹配独立的目标数字i,不能是多位数的一部分,同时要排除和s/season绑定的数字,但保留episode后的数字。以下是符合需求的正则表达式方案:

import re

target_num = 1  # 可替换为你需要匹配的数字,比如2
pattern = rf"(?:(?<!mp)(?<!\d)(?<!s)(?<!season\s)|(?<=episode\s)){target_num}(?!\d)"

# 测试用例
test_strings = [
    "xx 1.mp4",
    "xx 10.mp4",
    "xx21.mp4",
    "xx1.mp4",
    "xx 1 xx.mp4",
    "xx.1.xxx.mp4",
    "xx.11.xxx.mp4",
    "xxx s1e3 xxx.mp4",
    "xxx season 1 episode 3",
    "xxx season 2 episode 1"
]

for s in test_strings:
    if re.search(pattern, s):
        print(f"匹配成功:{s}")

正则各部分解释

  • (?:...):非捕获分组,用来组合两种匹配场景
  • 第一种场景(?<!mp)(?<!\d)(?<!s)(?<!season\s):
    • (?<!mp):保留你原有的需求,排除数字前是mp的情况
    • (?<!\d):排除数字前是其他数字的情况,避免匹配多位数里的目标数字(比如10里的1)
    • (?<!s):排除数字前是s的情况,避免匹配s1e3这类绑定的数字
    • (?<!season\s):排除数字前是season 的情况,避免匹配season 1这类绑定的数字
  • 第二种场景(?<=episode\s):专门允许数字前是episode 的情况,匹配season 2 episode 1这类属于episode的数字
  • {target_num}:替换为你需要匹配的目标数字i
  • (?!\d):排除数字后是其他数字的情况,避免匹配11这类多位数里的目标数字

运行结果

执行代码后会输出你预期的匹配内容:

匹配成功:xx 1.mp4
匹配成功:xx1.mp4
匹配成功:xx 1 xx.mp4
匹配成功:xx.1.xxx.mp4
匹配成功:xxx season 2 episode 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:35:27