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

如何在Python的re.compile中插入变量构建正则表达式?

如何在正则表达式中嵌入变量

早上好!我来帮你解决这个把变量传入re.compile()的问题~核心就是用Python的字符串格式化方法,把变量值嵌入到正则表达式的字符串模板里,再传给re.compile()就可以了,下面给你几种常用的方法:

方法1:使用f-string(Python 3.6+ 推荐)

这是目前最简洁直观的写法,直接在字符串前加f,然后用大括号{}把变量包起来嵌入进去:

import re
equipo = 'P79CAN01'
pattern = re.compile(f'[/*AB]{equipo}[#]?')

这样生成的正则表达式字符串就是[/*AB]P79CAN01[#]?,和你原本写的静态字符串效果完全一致。

方法2:使用str.format()方法

如果需要兼容Python 3.5及以下版本,或者更倾向于占位符的写法,可以用format():

import re
equipo = 'P79CAN01'
pattern = re.compile('[/*AB]{0}[#]?'.format(equipo))

这里的{0}是第一个占位符,format()方法里的equipo会替换这个位置。你也可以用命名占位符,比如[/*AB]{equipo_var}[#]?'.format(equipo_var=equipo),可读性会更好。

方法3:使用旧式的%格式化(不推荐,仅作兼容参考)

这是Python早期的字符串格式化方式,现在已经不推荐使用,但如果遇到旧代码可以了解:

import re
equipo = 'P79CAN01'
pattern = re.compile('[/*AB]%s[#]?' % equipo)

%s是字符串占位符,后面的% equipo会把变量值替换进去。

重要注意事项

如果你的equipo变量值里包含正则表达式的特殊字符(比如.、*、+、?这些),直接嵌入会导致正则匹配行为不符合预期,这时候需要用re.escape()方法对变量值进行转义,把特殊字符转换成字面量:

import re
equipo = 'P79.CAN01'  # 包含特殊字符.
pattern = re.compile(f'[/*AB]{re.escape(equipo)}[#]?')

转义后,.会被处理成字面量的.,而不是正则里匹配任意字符的通配符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:50:35