我正在尝试获取一系列令牌,例如"((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..."
的第一次出现时,不会停止匹配。我想我需要一个负向前瞻操作员,但我不确定这是否是正确的方法。
答案 0 :(得分:1)
典型问题。使用非贪婪量词。
sentence.scan(/\(\(.*?\)\)/)
或者,将/./
替换为“")"
以外的内容”:
sentence.scan(/\(\([^)]*\)\)/)
答案 1 :(得分:1)
试试这个正则表达式,只会从匹配的内部文本中拉出非圆括号
[(]{2}([^()]*)[)]{2}