как взорвать <br><br/> <br /> теги в строке? - PullRequest
0 голосов
/ 21 сентября 2009

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

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

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

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

спасибо.

Ответы [ 4 ]

3 голосов
/ 21 сентября 2009

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

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

Пояснение:

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

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

2 голосов
/ 21 сентября 2009

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

1 голос
/ 22 сентября 2009

Песто на 99% пути, однако Nokogiri поддерживает создание фрагмента документа, который не переносит текст в декларации:

 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
0 голосов
/ 21 сентября 2009

Если вы проанализируете строку с помощью 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, потому что Nokogiri обернет все это в <!DOCTYPE blah blah><html><body><p>YOUR TEXT</p></body></html>.

...