我正在使用Nokogiri来解析HTML文档。此问题所基于的源代码表示如下:
<td width='400' valign=top>
<b><u>Jenny ID:</u> 8675309</b><br />
Name of Place<br />
Street Address<br />
City, State, Zip<br />
Contact: Jenny Jenny<br />
Phone: 867-5309<br />
Fax:
</td>
我正在使用几个分隔符来检索Jenny ID:
和Name of Place
之间的文本。使用#strip
,我无法删除前导空格。
> returned_value.inspect
=> " 8675309\r\n "
> returned_value.strip
=> " 8675309"
如果我使用测试字符串,#strip
确实删除了前导和尾随空格。
> test_string = " 11111 "
> test_tring.strip
=> "11111"
我怎样才能彻底剥离这个领先的空间?我怀疑它是 
,但我无法摆脱它。
我保证在现实生活中我不是那么愚蠢,但是这个问题让我失望了。这是无情的。
谢谢!
答案 0 :(得分:4)
我试图像你一样得到同样的错误并创建了这个例子:
require 'nokogiri'
html = Nokogiri::HTML(<<-html
<td width='400' valign=top>
<b><u>Jenny ID:</u> 8675309</b><br />
Name of Place<br />
Street Address<br />
City, State, Zip<br />
Contact: Jenny Jenny<br />
Phone: 867-5309<br />
Fax:
</td>
html
)
el = html.css('b').first
txt = el.content.split(':').last
puts txt # ' 8675309'
p txt #"\u00A08675309"
p txt.strip #"\u00A08675309"
前导字符不是空格,而是\u00A0
(Unicode字符'NO-BREAK SPACE'(U + 00A0))。似乎strip
没有删除它。
如果您明确删除不间断空格,您将获得所需的结果。如果将\u00A0
替换为' '
(正常空格),则可以删除带有空格的空格而不将其移除到字符串中。
代码:
p txt.gsub("\u00A0", ' ').strip #-> "8675309"
您可以使用的替代品(感谢mu太短)
p txt.gsub(/\p{Space}/, ' ').strip
这需要UTF-8代码。没有你可能会得到一个Encoding :: CompatibilityError。