正则表达式如何从括号中提取单词

时间:2014-05-06 06:16:49

标签: ruby regex

我有以下情况。我有这样的字符串:

something(a,b), something(c,d)

我必须从括号中提取这些字符串字符。在这种情况下,它将是:

a b c d

我试着写正则表达式,但我失败了。我在Ruby工作。谢谢你的所有答案。

3 个答案:

答案 0 :(得分:2)

正如Arup所指出的,这里可以使用以下正则表达式

re = /\((\w+),(\w+)\)/

请注意,这是非常基本的,可能无法捕获您需要的所有用途。你需要能够解释那里投掷的空间吗?如果是这样,他们应该被排除在比赛之外吗?这些括号中的一些可能有两个以上的项目吗?如果这不能满足您的需求,您将需要更加具体。但是,请注意http://rubular.com/是一个用于处理正则表达式的惊人资源。

如果您特别好奇如何从中提取结果,您可以这样做

string = "this(a,b) that(x,y)"
(string.scan re).flatten
#=> ["a", "b", "x", "y"]

答案 1 :(得分:1)

例如,您可以使用类似

的内容
something\(([^,]*),([^)]*)

并从第1组和第2组捕获组中检索字符串。

请参阅http://rubular.com/r/pCh4YbEhZs

上的演示
subject.scan(/something\(([^,]*),([^)]*)/) {|result|
    # If the regex has capturing groups, result is an array with the text matched by each group (but without the overall match)
    # If the regex has no capturing groups, result is a string with the overall regex match
}

答案 2 :(得分:1)

  

否这只是问题的变化..

使用给定的正则表达式,您可以使用以下内容将字符串中的所有匹配项收集到数组中。如果正则表达式具有捕获组,则对flatten的调用只会使处理更容易,而您只对匹配列表感兴趣。

string  = 'something(a,b), something(c,d)'
matches = string.scan(/\((\w+),(\w+)\)/).flatten