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

Python字符串按顺序替换:将字符串a的引号内容替换b的' value '占位符

解决方案:按顺序替换字符串中的占位符

这里有个直接的Python实现方案,完美匹配你描述的需求——从字符串a里提取所有单引号包裹的内容,再按顺序替换字符串b中的' value '占位符:

import re

def replace_placeholders(a: str, b: str) -> str:
    # 从a中提取所有单引号包裹的内容(非贪婪匹配,确保只取到最近的单引号)
    extracted_values = re.findall(r"'(.*?)'", a)
    # 逐个替换b中的' value '占位符
    result = b
    for val in extracted_values:
        result = result.replace("' value '", f"'{val}'", 1)  # 每次只替换第一个匹配项
    return result

# 测试示例
a = "What is the id where we have 'sony electronics' as company name and 'pc' as the device type?"
b = '''select * from DIM_DEVICE_TYPE where COMPANY_NAME = ' value ' and DEVICE_TYPE = ' value ' '''

print(replace_placeholders(a, b))

代码细节解释:

  • 精准提取内容:用re.findall(r"'(.*?)'", a)正则表达式,(.*?)是非贪婪匹配模式,能精准捕获每一对单引号之间的内容,不会因为字符串中有多个单引号而出现误匹配的情况。
  • 按序替换占位符:循环遍历提取到的内容,每次调用replace时指定只替换第一个' value '(第三个参数1),这样就能保证替换顺序和提取顺序完全对应。
  • 边界情况兼容:如果a中提取的内容数量和b中的占位符数量不匹配,代码会自动处理——提取内容多的话,多余的会被忽略;占位符多的话,未被替换的会保留原样式。如果需要严格校验数量匹配,可以添加这段逻辑:
    placeholder_count = b.count("' value '")
      if len(extracted_values) != placeholder_count:
          raise ValueError(f"提取的内容数量({len(extracted_values)})与占位符数量({placeholder_count})不匹配")
    

运行测试代码后,输出结果就是你期望的:

select * from DIM_DEVICE_TYPE where COMPANY_NAME = 'sony electronics' and DEVICE_TYPE = 'pc'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:09:11