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

如何用正则表达式提取PO编号后的字母数字值?

解决PO编号提取的正则问题

原代码的问题在于正则表达式的分组设计:PO# (\w+)|PO NUMBER (\w+) 包含两个独立的捕获分组,当匹配到PO NUMBER时,目标编号实际在第二个分组(group(2)),但代码只读取了第一个分组(group(1)),导致无法正确输出结果。

修正方案

使用非捕获组统一两种前缀格式,确保目标编号始终在同一个捕获分组中,同时支持前缀与编号之间的任意空白字符(适配更多文本场景):

import re
text  = """THE PO NUMBER 134314 MUST BE INCLUDED ALONG WITH
SERVICE DATE ON ALL INVOICES SUBMITTED THROUGH THE AVID BILL PAY PROCESS.
THANK YOU."""

# 非捕获组匹配PO#或PO NUMBER,捕获后续的字母数字编号
p_no = re.search(r"(?:PO#|PO NUMBER)\s+(\w+)", text)
if p_no is None:
    print("No value found")
else:
    print(p_no.group(1))

代码说明

  • (?:PO#|PO NUMBER):非捕获组,用来匹配两种前缀格式,不会生成多余的捕获分组
  • \s+:匹配前缀与编号之间的一个或多个空白字符(包括空格、换行等),提升兼容性
  • (\w+):捕获后续的字母数字组合,支持纯数字、字母数字混合的PO编号格式
  • 无论匹配哪种前缀,目标编号都存储在group(1)中,彻底避免分组错位问题

执行后输出:134314,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:52:18