如何从字符串中删除单引号,只留下单词?

时间:2016-07-13 15:39:31

标签: ruby regex

我想从字符串中删除单引号,但不删除作为撇号的引号。

例如,我想转换它:

"I'm a very 'dumb' stackoverflow user."
#=> I'm a very dumb stackoverflow user.

类似于string.gsub("'", "") 将无法正常工作,因为它取代了所有单引号。 '中的"I'm不应被替换为“。

4 个答案:

答案 0 :(得分:7)

您需要确定唯一代表单引号的内容。例如,它可能是:

  • 引用后跟空格
  • 以空格开头的引号

在这种情况下,您可以使用:

s = "I'm a very 'dumb' stackoverflow user."
s.gsub(/( '|' )/, ' ')
# => "I'm a very dumb stackoverflow user."

但是,您必须确保此条件正确无误。如果不是,那么你需要隔离(并强制执行)你可以处理的另一个条件。

答案 1 :(得分:1)

由于您可能想要删除引号并保留撇号完整,我会使用正确的utf-8撇号

"I'm a very 'dumb' stackoverflow user.".gsub(/(?<=\p{L})'(?=\p{L})/, '’')
                                       .delete("'")
#⇒ "I’m a very dumb stackoverflow user."

我们在这里使用的是积极的lookbehind和lookahead:单引号,在它周围的两边都有一个字母,将被视为撇号。

另一个答案会在"He said 'yes', though technically (say, 'literally') he did not want to."

中留下一半的引号

答案 2 :(得分:1)

如果你不想替换撇号(假设你使用的是ASCII),你可以简单地删除旁边带有非字母的引号。

"I'm a very 'dumb' stackoverflow user.".gsub(/((?<!\w)'|'(?!\w))/, '')

你不能肯定地说引用是撇号。检测它们没有准确的规则。它们可以存在于“我带着詹姆斯的包!”之类的单词的末尾。但是在大多数情况下,提供的正则表达式都可以检测到它们。

答案 3 :(得分:0)

您可以将其限制为围绕“&#39;:

”的撇号
"It's my 'dumb' species' status".gsub(/'([\S]+)'/, '\1')
 => "It's my dumb species' status"