unicode零宽度连接器到正常空间

时间:2016-01-15 11:05:08

标签: ruby unicode gsub

我有这个文字

  file1 = "</span>‍foo"

隐藏在&#34;&gt;&#34;和&#34; f&#34;是一个零宽度的连接器(\ u200D)
我想将其更改为正常空间(\ u0020)

这就是我尝试过的事情

   file1 = file1.gsub(/\u200D/, ' ')

这是结果

   file2.puts file1 #=> </span>?foo

出于某种原因,它在那里插入了一个问号。即使我不用任何东西替换它而只是做

file1.puts file2

它仍然带有问号(如果您从一个文件中取出文本并输出到另一个文件,它似乎只会出现问号)
我希望最终结果是

file1.puts file2 #=> </span>‍ foo

我没有尝试使用ruby解析html

1 个答案:

答案 0 :(得分:4)

200d不是稀薄的空间,但是&#34;零宽度的连接器&#34;,它具有非类似空间的属性。 http://www.fileformat.info/info/unicode/char/200d/index.htm

首先,基本的正则表达式对我有用:

irb(main):042:0> "\u200d".gsub(/\u200d/,"xxx")
=> "xxx"

[[:space:]]没有(也没想到,因为它的石器时代POSIX东西......而且200d不是空间):

irb(main):003:0> "\u200d".gsub(/[[:space:]]/,"xxx")
=> "‍"

\ u200d不算作分隔符:空格:

irb(main):005:0> "\u200d".gsub(/\p{Cf}/,"xxx")
=> "‍"

但它匹配其他:格式

irb(main):006:0> "\u200d".gsub(/\p{Cf}/,"xxx")
=> "xxx"

来源:http://ruby-doc.org/core-2.1.1/Regexp.html