【发布时间】:2016-03-12 12:15:36
【问题描述】:
我有一个这样的字符串:
raw_string = "(a=1)(b=2)(c=3)"
我想匹配这个并在每组括号中获取值,并在一个组中获取每个结果。 例如:
组 0 = "a=1"
组 1 = "b=2" 等等..
我试过/(\(.*\))/g,但它似乎不起作用。有人可以帮我解决这个问题吗?
谢谢!
【问题讨论】:
-
你是如何应用正则表达式的?通过快速搜索,您似乎应该使用
string.scan(/regex/)。此外,您可能不想要.*,因为它很贪心,可能会吃掉您的所有输入。我会将其更改为.*?,或者更好的是[^)]+(匹配任何不是结束括号的字符)。 -
我想你只需要
s.scan(/\(([^()]+)\)/)。 this code 满足您的需求吗? -
我们需要更好地描述您的尝试:向我们展示演示问题的最少代码。 Stack Overflow 不是“给我代码”网站,它是我们帮助您修复代码的地方。我们希望您已经尝试过,遇到过问题,再次尝试过,遇到过另一个问题,并且一旦您用尽了您的选择,然后再询问。见meta.stackoverflow.com/questions/261592/… 和How to Ask。
-
投反对票可能是因为你说你有一个字符串
(a=1)(b=2)(c=3),但没有引号,这不是一个字符串,也不是任何Ruby对象。您可能认为这是在狡辩,但您应该包含引号还有另一个原因。您还应该将字符串分配给一个变量(例如,str = "(a=1)(b=2)(c=3)",以便读者可以在 cmets 和答案中使用该变量而无需定义它(并且您不能编写str = (a=1)(b=2)(c=3))。最后,为什么不总是使用 valid示例中的 Ruby 对象?
标签: ruby regex pattern-matching regex-greedy