Domanda

Ho una stringa con il mazzo di tag di interruzione.

purtroppo sono irregolari.

<Br> <BR> <br/> <BR/> <br /> ecc ...

Sto usando nokogiri, ma non so come dire che per spezzare la stringa in ogni tag rottura ....

Grazie.

È stato utile?

Soluzione

Quindi, per implementare la risposta di iftrue:

a = 'a<Br>b<BR>c<br/>d<BR/>e<br />f'
a.split(/<\s*[Bb][Rr]\s*\/*>/)
=> ["a", "b", "c", "d", "e", "f"]

... si è lasciato con un allineamento dei bit della stringa tra le pause HTML.

Altri suggerimenti

Se si riesce a rompere sulle espressioni regolari, utilizzare il seguente delimitatore:

<\s*[Bb][Rr]\s*\/*>

Spiegazione:

Per una parentesi angolare sinistra, zero o più spazi, B o B, R o R, zero o più spazi, zero o più barre dirette.

Per usare l'espressione regolare, guarda qui:
http://www.regular-expressions.info/ruby.html

del Pesto 99% del tragitto, però Nokogiri supporta la creazione di un frammento di documento che non va a capo il testo nella dichiarazione:

 text = Nokogiri::HTML::DocumentFragment.parse('<Br>this<BR>is<br/>a<BR/>text<br />string').children.select {|n| n.text? and n.content } 
puts text
# >> this
# >> is
# >> a
# >> text
# >> string

Se si analizza la stringa con Nokogiri, si può quindi eseguire la scansione attraverso di essa e ignorare qualcosa di diverso da elementi di testo:

require 'nokogiri'
doc = Nokogiri::HTML.parse('a<Br>b<BR>c<br/>d<BR/>e<br />f')
text = []
doc.search('p').first.children.each do |node|
  text << node.content if node.text?
end
p text  # => ["a", "b", "c", "d", "e", "f"]

Si noti che si deve cercare il primo tag p perché Nokogiri sarà avvolgere il tutto in <!DOCTYPE blah blah><html><body><p>YOUR TEXT</p></body></html>.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top