我无法从Nokogiri解析的字符串中删除空格

A.D*_*.D. 7 ruby whitespace mechanize nokogiri mechanize-ruby

我无法从字符串中删除空格.

我的HTML是:

<p class='your-price'>
Cena pro Vás: <strong>139&nbsp;<small>K?</small></strong>
</p>
Run Code Online (Sandbox Code Playgroud)

我的代码是:

#encoding: utf-8
require 'rubygems'
require 'mechanize'

agent = Mechanize.new
site  = agent.get("http://www.astratex.cz/podlozky-pod-raminka/doplnky")
price = site.search("//p[@class='your-price']/strong/text()")

val = price.first.text  => "139 "
val.strip               => "139 "
val.gsub(" ", "")       => "139 "
Run Code Online (Sandbox Code Playgroud)

gsub,strip等等不起作用.为什么,我该如何解决这个问题?

val.class      => String
val.dump       => "\"139\\u{a0}\""      !
val.encoding   => #<Encoding:UTF-8>

__ENCODING__               => #<Encoding:UTF-8>
Encoding.default_external  => #<Encoding:UTF-8>
Run Code Online (Sandbox Code Playgroud)

我正在使用Ruby 1.9.3,因此Unicode不应该是问题.

ton*_*edz 23

strip只删除ASCII空格,你在这里得到的字符是Unicode不间断空格.

删除角色很容易.您可以gsub通过提供带有字符代码的正则表达式来使用: gsub(/\u00a0/, '')

您也可以调用gsub(/[[:space:]]/, '')删除所有Unicode空格.有关详细信息,请查看文档

  • "像我这样的程序员认为Ruby会自动关心这个问题."不要假设,自己教会你的语言做什么.如果语言做了所有事情,那么在我们需要它做一些不同或新的事情时,它将毫无价值.作为程序员,我们使用旨在成为通用工具的较小代码段来设计解决方案.我们将它们插入,使用它们将数据塑造成我们需要的任何东西,我们不会盲目地"假设"事情会神奇地起作用.只要互联网充满了HTML,ASCII与UTF-8/Unicode将成为未来几年的战斗. (4认同)
  • 你也可以使用`\ p {Space}`代替`[[:space:]]`,如果你愿意的话(我认为它们是相同的). (2认同)