У меня есть строка в формате пары ключ-значение, разделенная пробелом. Я хочу разделить запятую вместо пробела.
Я попытался заменить функцию, но она также заменила пробелы моих значений запятой.
val = 'name=Ajay age=21 company=abc PVT LTD empid=12345'
мой желаемый результат:
'name=Ajay,age=21,company=abc PVT LTD,empid=12345'
@Kevin Предположительно, потому что у empid=
есть знак равенства. Но все же исходный формат неоптимален.
Как насчет:
\w+=[^=]+(?: |$)
Проверьте это на Regex101: https://regex101.com/r/GgbqxB/1
Этот шаблон выглядит так, как будто он успешно соответствует отдельным парам ключ-значение. Но как его использовать для получения строки с разделителями-запятыми? Я не думаю, что re.sub
будет работать из коробки, так как он также будет соответствовать последней паре ключ-значение, и вы не хотите добавлять запятую в конце.
Вы можете просто сопоставить шаблон <word>=
, а затем заменить их:
import re
val = 'name=Ajay age=21 company=abc PVT LTD empid=12345'
pattern = re.compile(r' \w+=')
pattern.sub(lambda match: match.group().replace(' ', ','), val)
# Output
# 'name=Ajay,age=21,company=abc PVT LTD,empid=12345'
Этот также должен быть хорошей ссылкой на то, как sub
работает с lambda
я бы сказал, что это лучшее решение, и вы просто установите вторую переменную, равную pattern.sub. val2 = шаблон.sub~
Но как узнать, что на выходе
company=abc PVT LTD,empid=12345
, а не, скажем,company=abc PVT,LTD empid=12345
илиcompany=abc,PVT LTD empid=12345
?