ruby - 将 UTF-8 空间更改为可使用 RegEx 的空间

标签 ruby regex encoding utf-8

我有以下代码使用 Nokogiri 解析 HTML 文档:

td.next_element.text.scan(/\A[^(]+/).first.gsub(/\s+/, " ").strip

还有一个 case 语句,其正则表达式包含 \s+ 并且没有捕获任何内容。我尝试使用 strip,但它没有做任何事情。

在使用上面的 gsub 行进行测试后,我认为空格的编码方式存在问题。 td.next_element.text[-2].ord 返回的不是我预期的 32,而是 160。我意识到我的文档是 UTF-8 而不是 ASCII,而且 160 是一个非打破空间。

我应该能做到这一点,我想:

case td.text.strip.downcase.gsub(/\xA0|\xC2/, ' ')

问题是,我明白了

Encoding::CompatibilityError 
  (incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string)):

我该怎么办?另外,正则表达式不应该匹配所有空格,而不仅仅是 ASCII 吗?

最佳答案

添加注释 #encoding: UTF-8 作为脚本的第一行;使用 /[[:space:]]/ 查找 Unicode 空格。

关于ruby - 将 UTF-8 空间更改为可使用 RegEx 的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12633236/

相关文章:

python - 需要正则表达式 :(

ruby-on-rails - 建立这种关系的有效方法是什么?

ruby - 用 ruby​​ 中的 selenium 遍历所有表单字段

ruby-on-rails - 如何在 some_module.rb 文件中打包 before_filter?

javascript - Google App Script 检查编辑的单元格是否包含空格

html - 浏览器无法正确显示阿拉伯字体

javascript - 使用 Watir 单击具有变量值的单选按钮

div 标签的 JavaScript 正则表达式

Java特殊字符替换

java - Java中字节流转字符流