Форум сайта python.su
0
Всем привет 
такая задачка, нужно разбить такую строчку по разделителю ‘,’
проблема в том, что зн-нием разделенным ‘,’ может быть регулярка в “” включающая разделитель - ‘,’
str = 'reserved-memory,NO,NO,NO,,NO,"^({1,20})$",,,,,,,cache-policy=^(RESIDENT|NO_MIGRATION)$,,,'
>>> s.split(',')
['reserved-memory', ‘NO’, ‘NO’, ‘NO’, ‘', ’NO', '"^({1', ‘20})$“’, ‘', ’', ‘', ’', ‘', ’', ‘cache-policy=^(RESIDENT|NO_MIGRATION)$’, ‘', ’', '']
такой список - это то что мне нужно, только я хочу чтобы регулярка в ”" была 1 элементом списка.
вот так
['reserved-memory', ‘NO’, ‘NO’, ‘NO’, ‘', ’NO', '"^({1, 20})$"', ‘', ’', ‘', ’', ‘', ’', ‘cache-policy=^(RESIDENT|NO_MIGRATION)$’, ‘', ’', '']
какие есть идеи?
Спасибо )
Отредактировано fr0st84 (Ноя. 23, 2012 17:34:31)
Офлайн
25
s = 'reserved-memory,NO,NO,NO,,NO,"^({1,20})$",,,,,,,cache-policy=^(RESIDENT|NO_MIGRATION)$,,,' def comma_split(s): if s.count(',') > 1: return s.split(',') return s def reduce_flat(a, b): if isinstance(b, list): a = a + b else: a.append(b) return a print reduce(reduce_flat, map(comma_split, s.split('"')), [])
['reserved-memory', 'NO', 'NO', 'NO', '', 'NO', '', '^({1,20})$', '', '', '', '', '', '', '', 'cache-policy=^(RESIDENT|NO_MIGRATION)$', '', '', '']
Отредактировано s0rg (Ноя. 23, 2012 18:37:46)
Офлайн
857
>>> import io >>> import csv >>> >>> s = 'reserved-memory,NO,NO,NO,,NO,"^({1,20})$",,,,,,,cache-policy=^(RESIDENT|NO_MIGRATION)$,,,' >>> >>> with io.StringIO(s) as sin: ... lst = next(csv.reader(sin), []) ... >>> print(lst) ['reserved-memory', 'NO', 'NO', 'NO', '', 'NO', '^({1,20})$', '', '', '', '', '', '', 'cache-policy=^(RESIDENT|NO_MIGRATION)$', '', '', ''] >>>
Офлайн
0
Спасибо всем за ответы 
>to s0rg
Ваш код не будет работать в случае если неск-ко ‘,’ присутствует в регулярке - “^({1,20}),,$”
>to py.user.next
спасибо, csv это то что нужно
я написал так:
Python 2.7.3 (default, Apr 14 2012, 08:58:41) on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import csv >>> s = 'reserved-memory,NO,NO,NO,,NO,"^({1,20}),,$",,,,,,,cache-policy=^(RESIDENT|NO_MIGRATION)$,,,' >>> csv.reader([s]).next() ['reserved-memory', 'NO', 'NO', 'NO', '', 'NO', '^({1,20}),,$', '', '', '', '', '', '', 'cache-policy=^(RESIDENT|NO_MIGRATION)$', '', '', '']
Отредактировано fr0st84 (Ноя. 26, 2012 17:08:04)
Офлайн
857
да, что-то я не догадался сразу
>>> s = 'reserved-memory,NO,NO,NO,,NO,"^({1,20})$",,,,,,,cache-policy=^(RESIDENT|NO_MIGRATION)$,,,' >>> lst = next(csv.reader([s]), []) >>> lst ['reserved-memory', 'NO', 'NO', 'NO', '', 'NO', '^({1,20})$', '', '', '', '', '', '', 'cache-policy=^(RESIDENT|NO_MIGRATION)$', '', '', ''] >>>
Офлайн
0
У нас используется питон 2.х, но я учту Ваше замечание.
Спасибо 
Офлайн