使用ruby正则表达式解析一组括号

时间:2013-05-14 16:25:39

标签: ruby regex

我正在尝试获取一系列令牌,例如"((token 1))""((token 2))"。我有以下代码:

sentence = "I had a ((an adjective)) sandwich for breakfast today. It oozed all over my ((a body part)) and ((a noun))."

token_arr = sentence.scan(/\(\(.*\)\)/)
# => ["((an adjective))", "((a body part)) and ((a noun))"]

上述代码在句子"))"中遇到"It oozed..."的第一次出现时,不会停止匹配。我想我需要一个负向前瞻操作员,但我不确定这是否是正确的方法。

2 个答案:

答案 0 :(得分:1)

典型问题。使用非贪婪量词。

sentence.scan(/\(\(.*?\)\)/)

或者,将/./替换为“")"以外的内容”:

sentence.scan(/\(\([^)]*\)\)/)

答案 1 :(得分:1)

试试这个正则表达式,只会从匹配的内部文本中拉出非圆括号

[(]{2}([^()]*)[)]{2}

enter image description here

enter image description here