2013-12-16 3 views
1

Я пытаюсь создать словарь с именами: идентификаторы с веб-страницы, имеющей список учетных записей. Для каждой учетной записи, HTML-код выглядит следующим образом:Ловля слова с re.findall

<a href="javascript:UserWindow('Mike','14','0','27s', 'profile')"> 
<a href="user.php?id=14">Mike</a> 

Питон код, который я строить:

IDs = re.findall('(?<=user.php\?id=\")\w+(?=\">)', src) 
names = re.findall('(?<=UserWindow\(\')\w+(?=\',\')', src) 

Для имен работает отлично, но для идентификаторов он не работает, и я не знаю, сделать это. Есть идеи? Заранее спасибо.

+0

ли не второй парам из 'UserWindow()' идентификатор? –

+0

@Casimir да, второй – MikeT

ответ

2

Ваш id, похоже, не начинается с ". Таким образом, использовать этот

IDs = re.findall('(?<=user.php\?id=)\w+(?=\">)', src) 
+0

Да, я не знаю, что было на уме :(Я выглядел как 1000 раз над кодом и каждый раз, когда я видел цитаты. Спасибо – MikeT

+0

@MikeT Добро пожаловать :) Пожалуйста, рассмотрите принимая этот ответ, если это действительно поможет вам :) – thefourtheye

+0

Можете ли вы помочь еще больше: Кажется, что таким образом: у меня есть имя, но идентификатор это не для правильной учетной записи. Например: у Майка есть ID 11 вместо 14. Как я могу это исправить? – MikeT

0

другой способ использования finditer:

#!/usr/bin/python 
import re 

html = '''<a href="javascript:UserWindow('Mike','14','0','27s', 'profile')"> 
<a href="javascript:UserWindow('Dorothee','184','0','27s', 'profile')"> 
<a href="javascript:UserWindow('Esmeralda','7','0','27s', 'profile')"> 
<a href="javascript:UserWindow('Monique','16','0','27s', 'profile')">''' 

pattern = r'UserWindow\(\'([^\']+)\',\'([^\']+)' 

users = {} 

matches = re.finditer(pattern, html) 

for m in matches: 
    users[m.group(1)] = m.group(2) 

print users 
Смежные вопросы