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

Python正则提取JARVIS-数字格式子串失败,求正确实现方案

问题与解决方案

需求

从以下字符串中提取JARVIS-<数字>格式的子串:

merge_req_title1 = "JARVIS-17442: Enable Fees report"
merge_req_title2 = "Resolve JARVIS-15887 'integration new'"

预期输出:JARVIS-17442 和 JARVIS-15887

原代码问题分析

你写的代码返回None,核心问题有两个:

  • 正则字符串没有加r前缀,导致\b被Python解析为退格字符,而非正则语法中的单词边界
  • 即使加了r前缀,\b的匹配逻辑也不适用:JARVIS-后的-是非单词字符,和数字(单词字符)的边界不符合预期,且目标子串后可能跟冒号、空格等字符,会导致\b匹配失败

正确实现方案

正则表达式选择

使用r'JARVIS-\d+'即可匹配JARVIS-加任意长度的数字(如果确定是固定5位数字,也可以用r'JARVIS-\d{5}'),不需要多余的单词边界,因为我们明确要匹配固定前缀加数字的组合。

完整代码

import re

merge_req_title1 = "JARVIS-17442: Enable Fees report"
merge_req_title2 = "Resolve JARVIS-15887 'integration new'"

if __name__ == '__main__':
    # 正则加r前缀避免转义问题
    reg_ex = r'JARVIS-\d+'
    # 处理第一个字符串
    result1 = re.search(reg_ex, merge_req_title1)
    if result1:
        print(result1.group())  # 输出 JARVIS-17442
    # 处理第二个字符串
    result2 = re.search(reg_ex, merge_req_title2)
    if result2:
        print(result2.group())  # 输出 JARVIS-15887

扩展:批量提取

如果单条文本中有多个目标子串,可以用re.findall一次性提取所有匹配项:

text = "JARVIS-12345 test JARVIS-67890"
results = re.findall(r'JARVIS-\d+', text)
print(results)  # 输出 ['JARVIS-12345', 'JARVIS-67890']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:44:53