我正在尝试从邮寄请求中分割尸体,我想知道这样做的最佳方法是什么。我当时想用“&”分割以提取每个参数,然后用“ =“分割以提取对字段/值
data1=value&data2=value2
它将拆分如下:
data1 value
data2 value2
但是,如果接收到的数据包含“&”或“ =”,则它将不起作用:split
方法将值中的该字符解释为分隔符,将其删除并创建另一个字段。最好的示例是在base64中接收的值。例如,“值”在base64中表示为dmFsdWU =
data1=dmFsdWU=&data2=value2
它将拆分为:
data1 dmFsdWU
data2 value2
关于我在这里可以做什么的任何建议?我正在考虑对数据的值进行编码,因此dmFsdWU =作为dmFsdWU%3D接收,但是我不知道是否有更好的解决方案
谢谢
答案 0 :(得分:2)
使用split
的第二个参数限制拆分:
in_str = "data1=dmFsdWU=&data2=value2"
param_list = [param_expr.split('=', 1) for param_expr in in_str.split('&')]
结果:
[['data1', 'dmFsdWU='], ['data2', 'value2']]
缺陷
您尚未描述完整的解释语法:如果第一个值包含&
,该怎么办。例如,将示例更改为
data1 = dmFsd&WU&data2 = value2
您打算去哪里
data1 dmFsd&WU
data2 value2
在这里获得什么解析规则?字段名称是否有限制,以消除歧义?例如,如果字段名称必须是字母数字,那么您的解析工作是可能的,但是会变得有些棘手:
=
;这确定了第一个字段名称&
... =
;这是第二个字段名称的结尾找到以字母=
结尾的字母数字序列;使用它作为第二个字段名称。
您现在已经确定了两个字段名称;其余两个字符串是值。
如何
请注意,有些病理字符串无法唯一地解析为一对字段/值对。最简单的,让我们举一个给定的例子:
data1=value&data2=value2
为什么这不是一个单一的字段/值对?
data1 value&data2=value2
只要允许值同时包含&
和=
,就会遇到这种情况。