Найти - Пользователи
Полная версия: Как лучше распарсить строку с необязательными значениями
Начало » Python для новичков » Как лучше распарсить строку с необязательными значениями
1 2
st01en
Есть строка типа “name#val1#val2”
где, name - обязательный параметр; val1 и val2 необязятельные параметры и имеют значение по умолчанию, заданое ранее; решетка - разделитель.
Т.е. может быть три варианта:
name
name#val1
name#val1#val2
как бы ее лучше распарсить? Сейчас у меня это сделано, на мой вгляд, довольно топорно:
str="name#val1#val2"
val1 = val2 = "default value"
if '#' in str:
lst=str.split('#')
name = lst[0]
val1 = lst[1]
if len(lst) == 3:
val2 = lst[2]
else:
name = str
Заранее спасибо
sp3
def getname_val(a,a1="default value",a2="default value"): 
return a,a1,a2

s="name!#val1#12"
name,val1,val2 = getname_val(*s.split('#'))

print name,val1,val2
кто короче напишет ?
st01en
ой-ой :)
что-то я не пойму как это работает. Вот та звездочка, что означает? А то даже не знаю какие доки искать :rolleyes:
Ed
sp3
кто короче напишет ?
Я думаю многие. Вот не самый короткий пример:
name, val1, val2 = (s.split('#') + ["default value"]*2)[:3]
st01en
Ed
Я думаю многие. Вот не самый короткий пример:
Вот это я понял как работает. Красиво :)

И тут уже чисто из любопытства возник вопрос, а что если строку развернуть, т.е. например val1#val2#name, где name опять таки обязательный, остальные - опционально?
Ed
st01en
а что если строку развернуть, т.е. например val1#val2#name
Например, так, для разнообразия:
name, val2, val1 = ("default value#"*2 + s).split('#')[-1:-4:-1]
PS: вообще-то это не разворот. Разворот будет так: val2#val1#name
st01en
Круто :)
Вот так все просто кажется когда увидел, почему ж самому такие мысли в голову не приходят? :)

Спасибо.
alexx11
А руглярки не катят?
str="name#val1#val2"
print re.match(r"(?P<name>.*?)(?![^#])", str).group("name")
Ed
alexx11
А руглярки не катят?
Ну почему же не катят. Только добавьте import re и удлинните регулярку для получения val1 и val2.
alexx11
val1, val2 - ТС сказал вроде не надо ему.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB