cómo explotar
etiquetas
en una cadena?
Pregunta
tengo una cadena con un montón de etiquetas de saltos.
desafortunadamente son irregulares.
<Br> <BR> <br/> <BR/> <br />
etc ...
Estoy utilizando nokogiri, pero no sé cómo decirle que para romper la cadena en cada etiqueta de salto ....
gracias.
Solución
Así que para poner en práctica la respuesta de 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"]
... uno se queda con una gran variedad de los bits de la cuerda entre los saltos de HTML.
Otros consejos
Si se puede romper en expresiones regulares, utilice el siguiente delimitador:
<\s*[Bb][Rr]\s*\/*>
Explicación:
Una escuadra de soporte izquierda, cero o más espacios, B o B, R o R, cero o más espacios, cero o más barras diagonales.
Para utilizar la expresión regular, mira aquí:
http://www.regular-expressions.info/ruby.html
Pesto de 99% del camino, sin embargo Nokogiri apoya la creación de un fragmento de documento que no ajustar el texto en la declaración:
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
Si analizar la cadena con Nokogiri, a continuación, puede escanear a través de él e ignorar excepto los elementos de texto cualquier cosa:
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"]
Tenga en cuenta que usted tiene que buscar la primera etiqueta p porque Nokogiri envolverá toda la cosa en <!DOCTYPE blah blah><html><body><p>YOUR TEXT</p></body></html>
.