如何在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
相关产品推荐
相关产品推荐

