查找含特定参数文件名的正则表达式问题求助
解决方案
以下是满足所有要求的正则表达式,涵盖你列出的四种空格场景,且仅使用匹配逻辑(无需排除):
(?<!\s)\s[A-Ga-g](?:b|#|m|M)?\s(?!\s)|\s{2}[A-Ga-g](?:b|#|m|M)?\s(?!\s)|(?<!\s)\s[A-Ga-g](?:b|#|m|M)?\s{2}(?!\s)|(?<!\s)\s[A-Ga-g](?:b|#|m|M)?\.\w+$
正则拆解(按四个场景分)
前后各1个空格(排除前后双空格)
(?<!\s)\s[A-Ga-g](?:b|#|m|M)?\s(?!\s)(?<!\s):负向回溯断言,确保目标字符串前的空格是单个(前面无额外空格)[A-Ga-g](?:b|#|m|M)?:匹配调式核心——大小写A-G开头,可选接b/#/m/M(?:表示非捕获组,优化性能)\s(?!\s):确保目标字符串后的空格是单个(后面无额外空格)
前2个空格后1个空格
\s{2}[A-Ga-g](?:b|#|m|M)?\s(?!\s)\s{2}:匹配前置的两个空格- 后续部分同场景1,确保后置是单个空格
前1个空格后2个空格
(?<!\s)\s[A-Ga-g](?:b|#|m|M)?\s{2}(?!\s)(?<!\s)\s:确保前置是单个空格\s{2}(?!\s):匹配后置的两个空格,且后面无额外空格
位于文件名后缀前,仅前接1个空格
(?<!\s)\s[A-Ga-g](?:b|#|m|M)?\.\w+$(?<!\s)\s:确保前置是单个空格\.\w+$:匹配文件名后缀(如.wav/.mp3),锚定到文件名结尾
你之前正则的问题
- 原正则
\s[A-Ga-g][b|#|m|M]\s强制要求调式字符串必须带后缀字符(b/#/m/M),漏掉了仅单个字母的情况(如C) - 未覆盖前双空格/后双空格、后缀前的场景
- 未处理“排除前后双空格”的约束,导致会匹配
Cm这类不符合要求的字符串
内容的提问来源于stack exchange,提问作者Mr.Pebbles1961
相关产品推荐
相关产品推荐

