如何用Python正则表达式提取指定代码中的键值对?
用Python正则提取Jinja2风格set语句的键值对
针对你要解析的{% set name = "testDB" %}这类文本,下面是能精准提取目标键值对的正则方案:
正则模式说明
使用这个正则表达式可以匹配并捕获所需内容:
{%\s*(set\s+\w+)\s*=\s*"([^"]+)"\s*%}
各部分作用:
{%\s*:匹配开头的{%及后续任意空白字符(兼容空格、制表符)(set\s+\w+):第一个捕获组,抓取set加变量名的组合(也就是你要的key)\s*=\s*:匹配等号前后的任意空白,兼容赋值语句的格式差异"([^"]+)":第二个捕获组,抓取双引号内的所有非引号字符(也就是你要的value)\s*%}:匹配结尾的%}及前面的任意空白
完整Python代码示例
import re text1 = '{% set name = "testDB" %}' text2 = '{% set version = "0.0.1" %}' # 定义正则模式 pattern = r'{%\s*(set\s+\w+)\s*=\s*"([^"]+)"\s*%}' # 解析text1 match1 = re.fullmatch(pattern, text1) if match1: key_text1 = match1.group(1) value_text1 = match1.group(2) print(f"key_text1 = {key_text1}, value_text1 = {value_text1}") else: print("No match found for text1") # 解析text2 match2 = re.fullmatch(pattern, text2) if match2: key_text2 = match2.group(1) value_text2 = match2.group(2) print(f"key_text2 = {key_text2}, value_text2 = {value_text2}") else: print("No match found for text2")
这里用re.fullmatch确保整个字符串完全匹配正则模式,避免部分匹配导致的误判。
运行结果
执行后会输出:
key_text1 = set name, value_text1 = testDB key_text2 = set version, value_text2 = 0.0.1
内容的提问来源于stack exchange,提问作者Gopal
相关产品推荐
相关产品推荐

