我想从字符串中删除单引号,但不删除作为撇号的引号。
例如,我想转换它:
"I'm a very 'dumb' stackoverflow user."
#=> I'm a very dumb stackoverflow user.
类似于string.gsub("'", "")
将无法正常工作,因为它取代了所有单引号。 '
中的"I'm
不应被替换为“。
答案 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"