通过正则格式化url查询字符串实现代码



import re

def format_query_string(query_string):
    # 使用正则表达式将查询字符串分割为键值对
    # 假设查询字符串是标准的,即"key1=value1&key2=value2&..."形式
    # 此处使用非贪婪匹配以处理值中包含特殊字符(如&)的情况
    query_params = re.findall(r'([^=&]+)=([^&]*)', query_string)
    
    # 格式化键值对,并重新组合为查询字符串
    # 使用urllib.parse.quote_plus对值进行URL编码,但此处为简化示例,未直接引入该库
    # 注意:实际使用中应考虑URL编码
    formatted_query_string = '&'.join([f"{key}={value}" for key, value in query_params])
    
    return formatted_query_string

# 示例
query_string = "name=John Doe&age=30&city=New%20York"
formatted_qs = format_query_string(query_string)
print(formatted_qs)  # 输出: name=John%20Doe&age=30&city=New%20York
# 注意:示例中的"John Doe"未自动编码,实际使用时需处理

# 注意:上述代码示例中,未直接对值进行URL编码,因为直接处理可能涉及复杂的逻辑(如处理已编码的字符)。
# 在实际应用中,你可能需要使用如urllib.parse.quote_plus或类似的方法对值进行URL编码。

这段代码定义了一个`format_query_string`函数,它接收一个查询字符串作为输入,并使用正则表达式将其分割为键值对。然后,它简单地将这些键值对重新组合成一个新的查询字符串,但请注意,示例中并没有对值进行URL编码。在实际应用中,你可能需要对每个值进行URL编码,以避免潜在的问题(如特殊字符或空格导致的问题)。

此外,示例中的查询字符串`"name=John Doe&age=30&city=New%20York"`已经对`city`的值进行了URL编码(`%20`代表空格),但`name`的值`"John Doe"`并未编码。在实际应用中,如果`name`的值是由用户输入或其他不可控来源提供的,那么你应该在将其添加到查询字符串之前对其进行URL编码。

请注意,上述代码是一个简化的示例,用于演示如何使用正则表达式来处理查询字符串。在实际应用中,你可能需要使用更复杂的逻辑来处理各种边缘情况和安全问题。