Используйте второй параметр 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
Какие правила синтаксического анализа получают здесь?Существуют ли ограничения на имя поля, которые устранят это?Например, если имя поля должно быть буквенно-цифровым, то ваша задача синтаксического анализа возможна, но становится немного сложнее:
- Найдите первое
=
;это определяет имя первого поля - Найти следующее
&
... - Найти следующее
=
;это конец имени второго поля Найдите буквенно-цифровую последовательность, оканчивающуюся на эту последнюю =
;используйте это как второе имя поля.
Теперь вы определили два имени поля;оставшиеся две строки являются значениями.
HOWEVER
Обратите внимание, что существуют патологические строки, которые не могут быть однозначно проанализированы в парепар поле / значение.Проще говоря, давайте возьмем ваш пример:
data1=value&data2=value2
Почему это не одна пара поле / значение?
data1 value&data2=value2
Вы столкнетесь с этим в любое время, когда значение можетсодержат как &
, так и =
.