【问题标题】:gsub a backslash to display a unicode character [closed]gsub 反斜杠以显示 unicode 字符 [关闭]
【发布时间】:2016-01-01 11:35:21
【问题描述】:

我想gsubu00E9 前面的反斜杠之一,以便它打印 unicode 字符,在这种情况下将是 e,顶部带有重音符号。下面是我正在使用的代码,它不起作用。

array1 = [
  ["V\\u00E9tiver (1978) ", "by L'Artisan Parfumeur", "12"],
  ["Time for Peace for Her (1999) ", "by Kenzo", "4"],
  ["Time for Peace for Him (1999) ", "by Kenzo", "7"], 
  [" Untitled (2009) ", "by Kenzo", "1"],
  [" Havana Vanille (2009) ", "by   L'Artisan Parfumeur", "10"]
]

array3 = array1.each do |s,a,r|
  puts s.gsub(/\\/,"")
end

所以我想知道的是正确的正则表达式来摆脱数组中的一个反斜杠。我想我上面的那个就足够了。但事实并非如此。

【问题讨论】:

标签: ruby regex unicode backslash


【解决方案1】:

您似乎不了解转义序列的工作原理。以这个字符串为例:

s = "V\u00E9tiver (1978)"

这里的\u00e9一个 字符é 的表示,而不是\ u 0 0 e 9 的六字符字符串。因此,如果您尝试替换它的任何部分(例如,“u”),您将失败,因为字符串中没有这样的字符。

s.gsub('u', 'U') # => "Vétiver (1978)"

而在你的字符串中

s2 = "V\\u00E9tiver (1978) "

你的情况完全不同。此处的反斜杠不会启动 unicode 转义序列,而是自行转义。这意味着以下字符 u00E9 只是字符串中的常规字符,而不是 unicode 代码点定义的一部分。

在我的脑海中,我不知道有什么方法可以将“\\u00E9”变成“\u00E9”(当然,缺少eval)。相反,您应该做的是修复该数据的来源,使其不会重复转义序列。

【讨论】:

  • 是的,谢谢您,因此 gsub 无法删除转义反斜杠...我将首先尝试调查此问题是如何发生的。
猜你喜欢
  • 2013-03-03
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2017-02-28
  • 2018-04-12
  • 2020-05-23
  • 2019-11-19
  • 2017-03-29
相关资源
最近更新 更多