0

我有一个带有一堆中断标签的字符串。

不幸的是,它们是不规则的。

<Br> <BR> <br/> <BR/> <br />ETC...

我正在使用 nokogiri,但我不知道如何告诉它在每个中断标记处分解字符串....

谢谢。

4

4 回答 4

3

如果您可以打破正则表达式,请使用以下分隔符:

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

解释:

一个左尖括号,零个或多个空格,B 或 b,R 或 r,零个或多个空格,零个或多个正斜杠。

要使用正则表达式,请看这里:
http ://www.regular-expressions.info/ruby.html

于 2009-09-21T18:57:49.633 回答
2

所以要实现 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 中断之间留下了一个字符串位数组。

于 2009-09-21T19:15:51.407 回答
1

Pesto 的 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
于 2009-09-22T13:42:54.213 回答
0

如果您使用 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>.

于 2009-09-21T19:02:35.193 回答