给定一个字符串如何删除周围的引号?

时间:2017-01-12 01:50:49

标签: ruby regex gsub

给出以下字符串:

  • Hello World
  • Hello" world"
  • Hello" world"喂
  • " Hello World"
  • " Hello World。生活怎么样?"

删除以字符串开头和结尾的可能字符串的最佳方法是什么。来自func的期望回报将是:

  • Hello World
  • Hello" world"
  • Hello" world"喂
  • Hello World
  • Hello World。生活怎么样?

由于

2 个答案:

答案 0 :(得分:4)

如果您正在谈论在字符串的开头和结尾删除引号

string.sub(/\A"/, '').sub(/"\z/, '')

如果您的意思是,如果同时出现在开头和结尾:

string.sub(/\A"(.*)"\z/, '\\1')

答案 1 :(得分:1)

使用编号保存(有时称为"寄存器")并使其非常简单:

$ cat quotes
Hello World
Hello "world"
Hello "world" hello
"Hello World"
"Hello World. How's life?"
$ cat quotes | sed 's/^\(\"\)\(.*\)\1$/\2/'
Hello World
Hello "world"
Hello "world" hello
Hello World
Hello World. How's life?

sed脚本说:"在行的开头^,如果有一个双引号"将它\(" \)存储在带编号的存储1中,存储其他任何东西\(。* \),只要编号在$行末尾保存一个,编号保存为2,然后将整个内容替换为编号保存两个(双引号之间的任何其他内容)。如果开头没有引号,则编号的save one为空,如果开头有一个但最后没有,则模式不匹配。 还有其他脚本语言,如perl,可以轻松处理正则表达式。