Уведомления

Группа в Telegram: @pythonsu

#1 Июль 13, 2014 00:25:32

gelius
Зарегистрирован: 2013-03-18
Сообщения: 132
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с регуляркой

Есть такой кусок:

slovo("slovo2","lalala123",{tut.nenugnaja:baida})
Нужно записать в словарь:
'slovo2': 'lalala123'
Так выглядит на данный момент:
	rex = re.compile(r'(tut_regularka)')
	acc = [d[2] for d in rex.findall(g.response.body)]
	slovar = dict([a.split(',', 1) for a in acc])
С регуляркой засада.

Офлайн

#2 Июль 13, 2014 02:45:19

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

помогите с регуляркой

>>> s = 'slovo("slovo2","lalala123",{tut.nenugnaja:baida})'
>>> rex = re.compile(r'"\w+"')
>>> rex.findall(s)
['"slovo2"', '"lalala123"']



————————————————
-*- Simple is better than complex -*-

Отредактировано terabayt (Июль 13, 2014 02:57:04)

Офлайн

#3 Июль 13, 2014 03:55:32

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

помогите с регуляркой

terabayt
а если пробел будет в выражении по ковычками? Тогда полагаю нужно что то подобное или несколкьо иное

rex = re.compile(r'".*"')



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Июль 13, 2014 04:26:20

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

помогите с регуляркой

JOHN_16
в описании об этом ничего не говорилось, а в примере не было слов с пробелами. я подумал что так нужно, может это еще и проверка.
какое описание проблемы и примеры, такой и ответ.



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Июль 13, 2014 09:45:31

gelius
Зарегистрирован: 2013-03-18
Сообщения: 132
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с регуляркой

Я поспешил с примером, написал не точно. Сори.
В

slovo("slovo2","lalala123",{tut.nenugnaja:baida})
slovo и slovo2 всегда одинаковы, а lalala123 каждый раз изменяется.
наличие slovo - обязательное условие.
Две ковычки '" в словаре немного не в тему.

Отредактировано gelius (Июль 13, 2014 09:59:27)

Офлайн

#6 Июль 13, 2014 10:12:56

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

помогите с регуляркой

ну если slovo и slovo2 всегда одинаковы, то регулярки использовать не эффективно. лучше так

>>> s = 'slovo("slovo2","lalala123",{tut.nenugnaja:baida})'
>>> a = s[16: s.find('"', 16)] #вот здесь нужно поменять 
>>> a
'lalala123'
16 = длина('slovo') + длина('slovo2') + 5



————————————————
-*- Simple is better than complex -*-

Офлайн

#7 Июль 13, 2014 14:06:25

gelius
Зарегистрирован: 2013-03-18
Сообщения: 132
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с регуляркой

Не вариант, ибо

slovo("slovo2","lalala123",{tut.nenugnaja:baida})
кусок html странички.

Офлайн

#8 Июль 13, 2014 19:47:48

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

помогите с регуляркой

ааааааааааааа, я уже задолбался угадывать. пусть вам экстрасенсы отвечают!



————————————————
-*- Simple is better than complex -*-

Офлайн

#9 Июль 13, 2014 21:06:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

помогите с регуляркой

>>> import re
>>> 
>>> s = """
... 
... slovo("slovo2","lalala123",{tut.nenugnaja:baida})
... 
... """
>>> 
>>> pat = r'\sslovo\("([^"]*)"\s*,\s*"([^"]*)"\s*,'
>>> 
>>> match = re.search(pat, s)
>>> kv = match and match.groups()
>>> 
>>> kv
('slovo2', 'lalala123')
>>>


Выражение с комментариями.
>>> import re
>>> 
>>> s = """
... 
... slovo("slovo2","lalala123",{tut.nenugnaja:baida})
... 
... """
>>> 
>>> pat = r"""
...     \s          # whitespace before
...     slovo\(     # start
... 
...     "           # dquote open
...     ([^"]*)     # all in quotes
...     "           # dquote close
... 
...     \s*         # optional whitespace
...     ,           # comma
...     \s*         # optional whitespace
... 
...     "           # dquote open
...     ([^"]*)     # all in quotes
...     "           # dquote close
... 
...     \s*         # optional whitespace
...     ,           # end comma
... """
>>> 
>>> match = re.search(pat, s, re.X)
>>> kv = match and match.groups()
>>> 
>>> kv
('slovo2', 'lalala123')
>>>



Отредактировано py.user.next (Июль 13, 2014 21:18:45)

Офлайн

#10 Июль 14, 2014 09:05:38

gelius
Зарегистрирован: 2013-03-18
Сообщения: 132
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с регуляркой

Не получается конвертировать в словарь:

    kv = dict(kv)
ValueError: dictionary update sequence element #0 has length 12; 2 is required

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version