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

Python正则表达式:忽略匹配前带有英文句点的情况

正则匹配解决方案

问题说明

需要匹配com-222这类格式(2-5个字母/数字/下划线 + 连字符 + 3位数字)的内容,但当目标内容前有英文句点(.)时不匹配。比如:

  • 匹配:5545com-222 → 提取com-222
  • 不匹配:5545.com-222

原正则\w{2,5}-\d{3}能匹配目标格式,但无法排除前置句点的情况,尝试[^\.]\w{2,5}-\d{3}无效。

修正后的正则表达式

使用负向零宽断言来排除前置句点的情况,正则表达式为:

(?<!\.)\w{2,5}-\d{3}
  • (?<!\.):负向零宽断言,确保当前位置的前一个字符不是英文句点(.)
  • \w{2,5}-\d{3}:原匹配规则,匹配2-5个单词字符加连字符加3位数字

修改后的Python代码

import re, os, sys, shutil

def getCode(file):
    # 加入负向零宽断言排除前置句点,保留忽略大小写规则
    codeRegex = re.compile(r'(?<!\.)\w{2,5}-\d{3}', re.IGNORECASE)
    mo = codeRegex.search(str(file))
    if mo:
        return mo.group()
    return False

补充说明

  • 负向零宽断言(?<!\.)不会消耗字符,只会检查前置条件,所以不会把匹配结果前面的无关字符(比如5545com-222里的5)包含进来
  • 原代码中两次调用search的逻辑可以优化为一次,提升执行效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:55:22