Вы можете использовать lookaheads, чтобы определить, являются ли заключенные кавычки частью значения или нет, посмотрев, за ними следует пробел или '>'
ruby-1.8.7-p248 > s='<tag_name attra="#{t("a.b.c")}" attrb="aa a">'
=> "<tag_name attra=\"\#{t(\"a.b.c\")}\" attrb=\"aa a\">"
ruby-1.8.7-p248 > s.scan /\w+=".*?"(?=\s|>)/
=> ["attra=\"\#{t(\"a.b.c\")}\"", "attrb=\"aa a\""]
Конечно, это победило 'Это не сработает, если в вашем значении атрибута есть кавычка, за которой следует пробел или символ «>», поэтому независимо от того, как вы на это смотрите, это проигрышная битва, если вы не пропустите эти кавычки внутри значений атрибута или не обработаете их каким-либо образом.По этой причине строка и регулярное выражение каждого языка имеют разделители, которые должны быть пропущены или предварительно обработаны, если они находятся внутри значения с разделителями.