Найти - Пользователи
Полная версия: помогите с регуляркой
Начало » Центр помощи » помогите с регуляркой
1 2
gelius
Есть такой кусок:
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])
С регуляркой засада.
terabayt
>>> s = 'slovo("slovo2","lalala123",{tut.nenugnaja:baida})'
>>> rex = re.compile(r'"\w+"')
>>> rex.findall(s)
['"slovo2"', '"lalala123"']
JOHN_16
terabayt
а если пробел будет в выражении по ковычками? Тогда полагаю нужно что то подобное или несколкьо иное
rex = re.compile(r'".*"')
terabayt
JOHN_16
в описании об этом ничего не говорилось, а в примере не было слов с пробелами. я подумал что так нужно, может это еще и проверка.
какое описание проблемы и примеры, такой и ответ.
gelius
Я поспешил с примером, написал не точно. Сори.
В
slovo("slovo2","lalala123",{tut.nenugnaja:baida})
slovo и slovo2 всегда одинаковы, а lalala123 каждый раз изменяется.
наличие slovo - обязательное условие.
Две ковычки '" в словаре немного не в тему.
terabayt
ну если slovo и slovo2 всегда одинаковы, то регулярки использовать не эффективно. лучше так
>>> s = 'slovo("slovo2","lalala123",{tut.nenugnaja:baida})'
>>> a = s[16: s.find('"', 16)] #вот здесь нужно поменять 
>>> a
'lalala123'
16 = длина('slovo') + длина('slovo2') + 5
gelius
Не вариант, ибо
slovo("slovo2","lalala123",{tut.nenugnaja:baida})
кусок html странички.
terabayt
ааааааааааааа, я уже задолбался угадывать. пусть вам экстрасенсы отвечают!
py.user.next
>>> 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')
>>>
gelius
Не получается конвертировать в словарь:
    kv = dict(kv)
ValueError: dictionary update sequence element #0 has length 12; 2 is required
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