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

如何在Python正则表达式中插入指定词列表,无需手动拼接|分隔符

实现方案

你可以通过正则动态拼接的方式实现需求,无需手动拼接所有前缀分支,推荐优先使用兼容全Python版本的捕获组方案,具体实现如下:

方案1:捕获组方案(全版本兼容)

利用re.findall默认返回捕获组内容的特性,匹配前缀后直接捕获目标编号,无需使用后向断言,代码如下:

import re
pg_content = "Hello my Ref No: 9XD123D and his Buyer's Ref: 87CVX61"
# 你的前缀列表
prefixes = ["Buyer's Ref:", "Ref No:", "Ref No :"]
# 对每个前缀做正则转义,避免前缀中的特殊字符影响正则匹配
escaped_prefixes = [re.escape(p) for p in prefixes]
# 动态拼接正则:非捕获组匹配任意前缀+空格,捕获组匹配后续的编号
pattern = rf"(?:{'|'.join(escaped_prefixes)}) ([\w\d-]+)"
ref_no = re.findall(pattern, pg_content)
print(ref_no)

运行输出为:['9XD123D', '87CVX61'],和你原有代码的效果完全一致。

方案2:后向断言方案(仅支持Python 3.10+)

如果你坚持要使用后向断言实现,可以用如下写法,注意仅Python 3.10及以上版本支持可变长度的后向断言:

import re
pg_content = "Hello my Ref No: 9XD123D and his Buyer's Ref: 87CVX61"
prefixes = ["Buyer's Ref:", "Ref No:", "Ref No :"]
escaped_prefixes = [re.escape(p) for p in prefixes]
# 动态拼接后向断言
pattern = rf"(?<={'|'.join(escaped_prefixes)} )[\w\d-]+"
ref_no = re.findall(pattern, pg_content)
print(ref_no)

注意事项

  • 必须对每个前缀调用re.escape转义,避免前缀中包含.、*、+等正则特殊字符时,正则解析出错。
  • 低版本Python使用后向断言方案会抛出look-behind requires fixed-width pattern错误,优先选择方案1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:06:03