Вопрос

у меня есть строка с кучей тегов разрыва.

к сожалению, они нерегулярны.

<Br> <BR> <br/> <BR/> <br /> и т. д...

я использую нокогири, но не знаю, как приказать ему разбивать строку на каждом теге разрыва....

Спасибо.

Это было полезно?

Решение

Итак, чтобы реализовать ответ 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"]

... у вас остается массив битов строки между разрывами HTML.

Другие советы

Если вы можете разбивать регулярные выражения, используйте следующий разделитель:

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

Объяснение:

Одна левая угловая скобка, ноль или более пробелов, B или b, R или r, ноль или более пробелов, ноль или более косых черт.

Чтобы использовать регулярное выражение, посмотрите здесь:
http://www.regular-expressions.info/ruby.html

Песто на 99% это сделал, однако Нокогири поддерживает создание фрагмента документа, который не переносит текст в объявление:

 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

Если вы проанализируете строку с помощью Nokogiri, вы сможете просмотреть ее и игнорировать все, кроме текстовых элементов:

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"]

Обратите внимание, что вам нужно искать первый тег p, потому что Нокогири обернет все это в <!DOCTYPE blah blah><html><body><p>YOUR TEXT</p></body></html>.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top