繁体   English   中英

gsub来自ruby中字符串的ASCII码字符

[英]gsub ASCII code characters from a string in ruby

我正在使用nokogiri来屏蔽一些HTML。 在某些情况下,我得到了一些奇怪的字符,我用以下代码跟踪了这些字符的ASCII码:

  @parser.leads[0].phone_numbers[0].each_byte  do |c|
    puts "char=#{c}"
  end

有问题的字符的ASCII码为194和160。

我想以某种方式解析这些字符。

我尝试了以下代码,但它不起作用。

@parser.leads[0].phone_numbers[0].gsub(/160.chr/,'').gsub(/194.chr/,'')

谁能告诉我如何实现这一目标?

我在尝试在“修剪”字符串时去掉不可见的字符时发现了这个问题。

s.strip没有为我工作,我发现不可见字符有ord194

上面的方法都没有为我工作,但后来我发现“ 将非破坏空间转换为Ruby中的空格 ”问题说:

使用/\ /匹配不间断空格: s.gsub(/\ /, ' ')将所有不间断空格转换为常规空格

使用/[[:space:]]/匹配所有空格,包括Unicode空格,如非中断空格。 这与/\\s/ ,它只匹配ASCII空格。

很高兴我找到了! 现在我正在使用:

s.gsub(/[[:space:]]/,'')

这并没有回答如何gsub特定字符代码的问题,但如果你只是想删除空格,它似乎工作得很好。

您的问题是您想要进行方法调用,而是创建一个Regexp。 您正在搜索并替换由字符串“160”组成的字符串,后跟任何字符,然后是字符串“chr”,然后执行相同操作,除非“160”替换为“194”。

相反,做gsub(160.chr, '')

更新(2018):此代码在当前的Ruby版本中不起作用。 请参考其他答案。

你也可以试试

s.gsub(/\xA0|\xC2/, '')

要么

s.delete 160.chr+194.chr

首先想到的是你应该使用gsub! 而不是gsub

gsub返回一个字符串和gsub! 在适当的位置执行替换

我在尝试上述解决方案时遇到“无效的多字节转义”错误,但是针对不同的情况。 当数字大于999时谷歌返回\\ xA0,我想删除它。 所以我所做的是使用return_value.gsub(/ [\\ xA0] / n,“”)代替它,它对我来说非常好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM