Я делаю синтаксический анализатор ключа, где входная строка принимает форму key:"value",key2:"value"
. Ключи могут содержать символы , A-Z
и 0-9
, а значения могут содержать любой символ, но :
, ,
, "
и \
должны иметь префикс обратной косой черты. Запятые используются для разделения пар ключ-значение, но не нужны после последней пары.Соответствие шаблону ключевого значения regex
До сих пор у меня есть ([a-zA-Z0-9]+):"(.*)"
, который будет соответствовать большинству ключей и значений, но, очевидно, он не сможет обрабатывать больше одной пары или если какой-либо из «контрольных» символов не отображается. (?<=\\)[:,"\\]
, похоже, соответствует всем экранированным символам, но не соответствует никаким «нормальным» символам.
Есть ли способ проверить разделение запятой и сопоставить все экранированные символы «управления», а также обычные? Является ли это чем-то более подходящим для реализации без регулярного выражения, или это потребует нескольких шаблонов в последовательности?
Некоторые примеры:
вход: joe:"bread",sam:"fish"
выход: joe -> bread
sam -> fish
вход: joe:"Look over there\, it's a shark!",sam:"I like fish."
выход: joe -> Look over there, it's a shark!
sam -> I like fish
Можете ли вы привести пример вместе с ожидаемым выходом? –
Почему вы не используете 'input_string.split (", ")' then loop results и 'result.split (": ")', тогда у вас есть пары ключей -> val в цикле, чтобы сделать, как вам заблагорассудится. – gwillie
Может ли новая строка быть частью ценности? И как это указано в значении? – nhahtdh