Итак, я пытаюсь решить проблему, если, если perens находятся в правильном порядке, я вернусь к истине; иначе, конечно, ложно. Код я придумал здесь:Как отделить строку perens без потери perens? Ruby
def valid_parentheses(str)
return false if str.length % 2 == 1
begin
eval(str)
rescue SyntaxError
false
else
true
end
end
end
работает как шарм, за исключением ситуаций, как valid_parentheses("hi(hi)()")
, который должен возвращается # => true
, но вместо этого возвращает false
, потому что окончание ()
являются цитата-Unquote ненужными и, следовательно, вызывает ошибку.
Я попытался разбить его в круглые скобки, но:
str.split(/\(.*\))
# =>"hi"
, потому что он удалил все скобки, а также:
str.scan(/\(.*\))
#=> "(hi)()"
, потому что до сих пор технически начинается с (
и заканчивается )
.
Как разделить это, чтобы получить "(hi)"
и "()"
отдельно?
Не могли бы вы объяснить, ясно, что вы хотите достичь с помощью одного или нескольких примеров входных строк и соответствующих ожидаемых результатов? Если я хорошо понимаю, вы хотите проверить, сбалансированы ли скобки, не так ли? Я уже могу сказать, что метод 'split' - это не путь. И почему этот странный тест 'return false if str.length% 2 == 1'? * (обратите внимание, что '== 1' бесполезен, и вместо использования модуля вы можете проверить последний бит) * –