我有这条短信

  file1 = "</span>‍foo"

隐藏在“>”和“f”之间的是零宽度连接符(\u200D)
我想将此更改为普通空间(\u0020)
这是我试过的
   file1 = file1.gsub(/\u200D/, ' ')

这就是结果
   file2.puts file1 #=> </span>?foo

不知什么原因,它在那里插入了一个问号即使我不把它换成任何东西
file1.puts file2

它仍然会有一个问号(只有当你从一个文件中提取文本并输出到另一个文件时,它才会出现问号)
我希望最终结果是
file1.puts file2 #=> </span>‍ foo

我不想用ruby解析html

最佳答案

200d不是薄空间,而是“零宽度连接符”,它具有非空间性质http://www.fileformat.info/info/unicode/char/200d/index.htm
首先,基本regexp适用于我:

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

10-04 10:31