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

