2010-01-20 7 views
0

Cela semble être le problème le plus difficile que j'ai eu jusqu'à présent, mais peut-être que je le rends plus difficile que nécessaire. J'ai besoin de supprimer un nombre inconnu d'éléments imbriqués qui peuvent ou peuvent ne pas être au début d'une phrase. Les éléments span contiennent un certain nombre de mots entre parenthèses. Donc dans la phrase:Élimination de Nokogiri Element en utilisant Regex dans Ruby

(cryptographie, argot) Un pare-feu internet.

(cryptographie, argot) ressemble à ceci:

<span class="ib-brac"><span class="qualifier-brac">(</span></span><span class="ib-content"><span class="qualifier-content">cryptography<span class="ib-comma"><span class="qualifier-comma">,</span></span> <a href="/wiki/Appendix:Glossary#slang" title="Appendix:Glossary">slang</a></span></span><span class="ib-brac"><span class="qualifier-brac">)</span></span> 

Je pensais une bonne solution serait d'utiliser regex et nokogiri pour vérifier si le premier « (» existe ou non et si elle le fait, enlever toutes les travées jusqu'à la fermeture ')' est atteinte, mais je n'ai aucune idée de comment faire cela. La solution que je me sers maintenant ne compte pas un nombre variable de portées:

if definition.inner_html =~ /^<span class/ 
    definition.search("span")[0..4].each do |span| 
    span.remove 
    end 
end 
+0

Je pense que vous devriez essayer d'expliquer mieux ce que vous essayez d'obtenir, au lieu de suggérer la méthode tout de suite. Je comprends votre problème en tant que vous avez une chaîne avec une sous-chaîne entre parenthèses, et vous voulez le supprimer, avec tous les SPAN englobants. –

Répondre

1

Pas 100% sûr de ce que vous essayez de faire, mais au-dessus de votre code peut supprimer un nombre variable de portées si vous laissez juste hors de l'index:

if definition.inner_html =~ /^<span class/ 
    definition.search("span").each do |span| 
    span.remove 
    end 
end