2017-03-28 1 views
0

J'utilise ce code pour lister les adresses électroniques d'une page HTML.Comment supprimer des caractères dans une chaîne après un courrier électronique

require 'nokogiri' 

selector = "//a[starts-with(@href, \"mailto:\")]/@href" 

doc = Nokogiri::HTML.parse File.read 'in.rb' 

nodes = doc.xpath selector 

addresses = nodes.collect {|n| n.value[7..-1]} 

puts addresses 

C'est un exemple de code que je suis l'analyse syntaxique:

<a href="mailto:[email protected]?subject=My Business Is Dying"> 

Mais je reçois plus que l'adresse e-mail. Je reçois dans mes résultats:

[email protected]?subject=My Business Is Dying 

Comment puis-je déposer tout ce qui suit le point d'interrogation il est donc que l'adresse e-mail?

+0

'in.rb' est un fichier HTML? – tadman

Répondre

1

Vous pouvez toujours couper quoi que ce soit après le caractère ?:

addresses.map! do |address| 
    address.sub(/\?.*/, '') 
end 
+0

a parfaitement fonctionné, Thx – MMark

0

Je serais probablement utiliser un de ces deux:

str = '[email protected]?subject=My Business Is Dying' 

str.split('?').first # => "[email protected]" 
str[/^[^?]+/] # => "[email protected]" 

Le second est une expression régulière simple intégrée dans String's [] (slice) method. Le motif dit essentiellement "commencer au début et tout attraper jusqu'à un point d'interrogation."

Ils sont équivalents en ce qui concerne la vitesse. J'utiliserais probablement le premier parce que c'est plus facile à lire.