J'ai un document HTML de ce format:Ruby aide régulière d'expression en utilisant correspondance pour extraire des morceaux de doc html
<tr><td colspan="4"><span class="fullName">Bill Gussio</span></td></tr>
<tr>
<td class="sectionHeader">Contact</td>
<td class="sectionHeader">Phone</td>
<td class="sectionHeader">Home</td>
<td class="sectionHeader">Work</td>
</tr>
<tr valign="top">
<td class="sectionContent"><span>Screen Name:</span> <span>bhjiggy</span><br><span>Email 1:</span> <span>[email protected]</span></td>
<td class="sectionContent"><span>Mobile: </span><span>2404173223</span></td>
<td class="sectionContent"><span>NY</span><br><span>New York</span><br><span>78642</span></td>
<td class="sectionContent"><span>MD</span><br><span>Owings Mills</span><br><span>21093</span></td>
</tr>
<tr><td colspan="4"><hr class="contactSeparator"></td></tr>
<tr><td colspan="4"><span class="fullName">Eddie Osefo</span></td></tr>
<tr>
<td class="sectionHeader">Contact</td>
<td class="sectionHeader">Phone</td>
<td class="sectionHeader">Home</td>
<td class="sectionHeader">Work</td>
</tr>
<tr valign="top">
<td class="sectionContent"><span>Screen Name:</span> <span>eddieOS</span><br><span>Email 1:</span> <span>[email protected]</span></td>
<td class="sectionContent"></td>
<td class="sectionContent"><span></span></td>
<td class="sectionContent"><span></span></td>
</tr>
<tr><td colspan="4"><hr class="contactSeparator"></td></tr>
Il alterne - morceau de coordonnées et puis un « séparateur de contact ». Je veux saisir les informations de contact de sorte que mon premier obstacle est de saisir les morceaux entre le séparateur de contact. J'ai déjà compris l'expression régulière en utilisant des rubriques. C'est:
/<tr><td colspan="4"><span class="fullName">((.|\s)*?)<hr class="contactSeparator">/
Vous pouvez vérifier sur les rubriques pour vérifier que cela isole les morceaux.
Cependant, mon gros problème est que j'ai des problèmes avec le code ruby. J'utilise la fonction de correspondance intégrée et fais des tirages, mais n'obtiens pas les résultats que j'attends. Voici le code:
page = agent.get uri.to_s
chunks = page.body.match(/<tr><td colspan="4"><span class="fullName">((.|\s)*?)<hr class="contactSeparator">/).captures
chunks.each do |chunk|
puts "new chunk: " + chunk.inspect
end
Notez que page.body est que le corps du document html attrapée par Mechanize. Le document html est beaucoup plus grand mais a ce format. Ainsi, la sortie inattendue est ci-dessous:
new chunk: "Bill Gussio</span></td></tr>\r\n\t<tr>\r\n\t\t<td class=\"sectionHeader\">Contact</td>\r\n\t\t<td class=\"sectionHeader\">Phone</td>\r\n\t\t<td class=\"sectionHeader\">Home</td>\r\n\t\t<td class=\"sectionHeader\">Work</td>\r\n\t</tr>\r\n\t<tr valign=\"top\">\r\n\t\t<td class=\"sectionContent\"><span>Screen Name:</span> <span>bhjiggy</span><br><span>Email 1:</span> <span>[email protected]</span></td>\r\n\t\t<td class=\"sectionContent\"><span>Mobile: </span><span>2404173223</span></td>\r\n\t\t<td class=\"sectionContent\"><span>NY</span><br><span>New York</span><br><span>78642</span></td>\r\n\t\t<td class=\"sectionContent\"><span>MD</span><br><span>Owings Mills</span><br><span>21093</span></td>\r\n\t</tr>\r\n\t\r\n\t<tr><td colspan=\"4\">"
new chunk: ">"
Il y a 2 surprises ici pour moi:
1) Il n'y a pas 2 matchs qui contiennent les morceaux de coordonnées, même si sur Rubular j'ai vérifié que ces morceaux devraient être extraits.
2) Tous les \ r \ n \ t (sauts de ligne, onglets, etc.) apparaissent dans les correspondances.
Quelqu'un peut-il voir le problème ici? Alternativement, si quelqu'un connaît un bon importateur de contacts AOL libre, ce serait génial. J'utilise blackbook mais ça continue à échouer pour moi sur AOL et j'essaye de le réparer. Malheureusement, AOL n'a pas encore d'API de contacts.
Merci!
Plus précisément, je suis en train d'extraire du HTML. J'ai triché avec XPATH, mais à cause des données exactes que j'essaie de retirer, il semble vraiment très difficile d'obtenir ce que je veux. Il semble que XPATH est bon pour obtenir toutes les données entre 2 nœuds, ce n'est pas ce que je veux. En outre, docs XPATH pour ruby est mauvais! – Tony