Ruby 从字符串中删除结束括号集

Ruby 从字符串中删除结束括号集,ruby,regex,Ruby,Regex,我读过[这][1]和[这][2],但他们没有完全回答我的问题 假设我有以下产品名称和代码: Cool Product 9000(CP9000) 我想去掉最后一个空间和后面的所有东西,只留下: Cool Product 9000 我将如何做到这一点 如果你知道有一个指南或教程可以解释这一点,请随意告诉我 编辑:如果我最初的问题有点不清楚,我深表歉意。我很欣赏所有的答案,在将其中一个作为答案之前,我会对它们进行测试,看看我最喜欢哪一个。这应该可以: string.sub!(/\s+\S*$/, ''

我读过[这][1]和[这][2],但他们没有完全回答我的问题

假设我有以下产品名称和代码:

Cool Product 9000(CP9000)

我想去掉最后一个空间和后面的所有东西,只留下:

Cool Product 9000

我将如何做到这一点

如果你知道有一个指南或教程可以解释这一点,请随意告诉我

编辑:如果我最初的问题有点不清楚,我深表歉意。我很欣赏所有的答案,在将其中一个作为答案之前,我会对它们进行测试,看看我最喜欢哪一个。

这应该可以:

string.sub!(/\s+\S*$/, '')
但是,出于括号内的善意,您还可以:

string.sub!(/\s+\(.*?$/, '')
它将捕捉(而不是捕捉)下面@Phrogz给出的示例:

foo bar baz
不会被更改和删除

foo bar (bar baz)
将变成

foo bar
这应该做到:

string.sub!(/\s+\S*$/, '')
但是,出于括号内的善意,您还可以:

string.sub!(/\s+\(.*?$/, '')
它将捕捉(而不是捕捉)下面@Phrogz给出的示例:

foo bar baz
不会被更改和删除

foo bar (bar baz)
将变成

foo bar
也就是说:

  • 查找一些可选空格
    \s*
  • …后跟一个开括号(
  • …后跟一个或多个非文字右括号的字符
    [^)]+
  • …后跟一个右括号
    \)
  • …后跟字符串的结尾
    \z
然后什么都不做

s = 'Cool Product 9000 (CP9000)'
s[0...s.rindex(" ")]
# => "Cool Product 9000"
也就是说:

  • 查找一些可选空格
    \s*
  • …后跟一个开括号(
  • …后跟一个或多个非文字右括号的字符
    [^)]+
  • …后跟一个右括号
    \)
  • …后跟字符串的结尾
    \z

并将其替换为零。

与OMG的方法相同,但修改
s
本身:

s = 'Cool Product 9000 (CP9000)'
s[0...s.rindex(" ")]
# => "Cool Product 9000"
s = 'Cool Product 9000 (CP9000)'
s[s.rindex(' ')..-1] = ''

s
# => "Cool Product 9000"

与OMG的方法相同,但修改
s
本身:

s = 'Cool Product 9000 (CP9000)'
s[s.rindex(' ')..-1] = ''

s
# => "Cool Product 9000"

OP明确地说了
+1
,因为每当OP已经提到他/她的要求时,我不喜欢猜得更多。我错了,马萨+1:)问题标题和样本数据与句子之间的差异误导了我。我已经删除了我的贬损(和不正确的)评论。虽然可能不是最干净的(但肯定很简单),但无法“.split”将字符串拆分为一个数组,删除最后一个元素,然后重新加入它工作吗?在你回答后,我考虑了一下。OP明确地说了
+1
,因为我不想在OP已经提到他/她的要求时再猜更多。我错了,马萨+1:)问题标题和样本数据与句子之间的差异误导了我。我已经删除了我的贬损(和不正确的)评论。虽然可能不是最干净的(但肯定很简单),但无法“.split”将字符串拆分为一个数组,删除最后一个元素,然后重新加入它工作吗?你回答后我就想到了。卢克,用不吉利的限定词<代码>/\s*\(.*?\)\z/:D@Massa-这做了同样的事情,但由于回溯,通常表现较差。使用ungreedy限定符,Luke<代码>/\s*\(.*?\)\z/:D@Massa-这做了同样的事情,但由于回溯,总体表现较差。