【问题标题】:How come you can't gsub this string in Ruby?为什么你不能在 Ruby 中 gsub 这个字符串?
【发布时间】:2014-03-14 01:42:02
【问题描述】:

这些\\n 出现在我的字符串中,即使它应该只是\n

但如果我这样做:

"\n".gsub('\\n','\b')

它返回:

"\n"

理想情况下,我正在尝试找到一个可以重写此字符串的正则表达式:

"R3pQvDqmz/EQ7zho2mhIeE6UB4dLa6GUH7173VEMdGCcdsRm5pernkqCgbnj\\nZjTX\\n"

不显示两个反斜杠,而只显示一个这样的:

"R3pQvDqmz/EQ7zho2mhIeE6UB4dLa6GUH7173VEMdGCcdsRm5pernkqCgbnj\nZjTX\n"

但是我做的任何正则表达式都不起作用。我可以 gsub 出 \n 并在其中放置类似 X 的内容,但如果我在其中放置 \,那么 Ruby 会使用额外的 \ 对其进行转义,这会破坏我的加密模块,因为它需要具体.

有什么想法吗?

【问题讨论】:

  • 我对您的实际目标有点困惑,但请尝试使用 '\n' 而不是 "\n"
  • \\n 替换为字符串\n字符 换行符?
  • 这里有一个关于 gsub 中黑斜线的相关主题:stackoverflow.com/questions/1542214/…

标签: ruby regex


【解决方案1】:

在双引号和单引号的字符串中使用时,您会陷入转义的不同含义的陷阱。双引号字符串允许使用转义字符。因此,这里的"\n" 实际上是一个包含单个换行符的单字符字符串。将其与 '\n' 进行比较,'\n' 是一个包含文字反斜杠后跟字符 n 的两个字符的字符串。

这说明,您的 gsub 不匹配。如果您使用以下代码,它应该可以工作:

"\\n".gsub('\n','\b')

对于您的实际问题,您可以使用此

string = "R3pQvDqmz/EQ7zho2mhIeE6UB4dLa6GUH7173VEMdGCcdsRm5pernkqCgbnj\\nZjTX\\n"
new_string = string.gsub("\\n", "\n")

【讨论】:

  • +1 进一步阐明第一种情况:"\n".gsub("\n",'\b') 导致"\\b"
  • Trip 在他的第一个示例中真正想要实现的目标有点不清楚。我使用的代码与他的数据相匹配,所以我选择了这个。你的例子也有效。关键是,他试图匹配不同的东西,因此没有得到他预期的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
相关资源
最近更新 更多