如何将单双引号混合的Python字符串列表统一为双引号包裹
解决Python列表字符串字面量统一用双引号包裹的问题
首先要明确:Python列表中的字符串元素本身不包含首尾引号,引号只是编写代码时的字面量标记。比如'a string'和"a string"在Python中对应的字符串值完全相同,都是a string。如果你需要的是生成代码文本时让所有字符串字面量统一用双引号包裹,可以用以下两种方法:
方法1:用JSON序列化(推荐)
利用json.dumps()会自动用双引号包裹字符串,同时保留内部撇号(单引号),还能正确转义字符串内的双引号:
import json my_list = ['a string with a single quote', "my organisation's goals", 'another string with double quote'] # 生成标准的双引号包裹的列表字符串 formatted_list = json.dumps(my_list) # 拼接成带变量名的代码文本 result = f"my_list = {formatted_list}" print(result)
运行后输出:
my_list = ["a string with a single quote", "my organisation's goals", "another string with double quote"]
方法2:正则表达式替换(处理代码文本)
如果是直接处理一段Python代码的文本字符串,用正则匹配单引号包裹的内容,替换成双引号:
import re # 原始代码文本 code_text = """my_list = ['a string with a single quote', "my organisation's goals", 'another string with double quote']""" # 正则匹配首尾的单引号,替换成双引号,不影响内部撇号 new_code = re.sub(r"'([^'\\]*(?:\\.[^'\\]*)*)'", r'"\1"', code_text) print(new_code)
输出结果同样符合要求。
你之前尝试的replace("'", '"')会把所有单引号(包括内部撇号)替换成双引号,所以出错;而切片的方法只是去掉了单引号,没有重新用双引号包裹,自然达不到效果。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

