无法从Ruby字符串中去掉一个顽固的空格(涉及到Nokogiri)



我使用Nokogiri来解析HTML文档。这个问题所基于的源代码表示如下:

<td width='400' valign=top>
  <b><u>Jenny ID:</u>&nbsp;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
=> " 8675309rn                  "
 > returned_value.strip
=> " 8675309"

如果我使用一个测试字符串,#strip确实删除了前后空白。

 > test_string = " 11111 "
 > test_tring.strip
=> "11111"

我怎样才能完全去掉这个前导空格?我怀疑这是&nbsp,但我无法摆脱它。

我保证我在现实生活中没有这么笨,但是这个问题把我难住了。这是无情的。

谢谢!

我试着像你一样得到同样的错误,并创建了这个例子:

require 'nokogiri'
html = Nokogiri::HTML(<<-html
<td width='400' valign=top>
  <b><u>Jenny ID:</u>&nbsp;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替换为' '(普通空格),那么您可以使用strip删除空格,而无需在字符串中删除它。

代码:

p txt.gsub("u00A0", ' ').strip   #-> "8675309"

你可以选择使用(感谢mu太短)

p txt.gsub(/p{Space}/, ' ').strip

这需要UTF-8代码。没有你可能会得到Encoding::CompatibilityError.

相关内容

  • 没有找到相关文章

最新更新