我有一个这样的字符串:
s = '+((((content:suspension) (content:sensor))~2) ((+(((content:susp) (content:sensor))~2)) (+(((content:height) (content:control) (content:sensor))~3)) (+(((content:height) (content:sensor))~2)) (+(((content:level) (content:control) (content:sensor))~3)) (+(((content:rear) (content:height) (content:sensor))~3)) (+(((content:ride) (content:height) (content:sensor))~3))))'
我想将它转换成一个字符串数组,如下所示:
["suspension sensor", "susp sensor", "height control sensor", "height sensor", "level control sensor", "rear height sensor", "ride height sensor"]
这是一个非常丑陋的代码,可以实现:
a = s.gsub('content:', '') \
.gsub(/\+/, '') \
.gsub(/~\d/, '') \
.gsub(/\((\w+)\)/) { $1 } \
.gsub(/\(([^\(]*[^\)])\)/) { "#{$1}" } \
.gsub(/[\(\)]/,', ') \
.split(/\s?,\s?/) \
.reject {|x| x.strip == ''}
我认为必须有一个更好的方法来实现这一点,因为如果你取出content:
前缀以及+
和~\d
件,那么它就像一个Lisp表达
答案 0 :(得分:0)
s.gsub(/\(content:([^(]*)\)/, '\1').scan(/(?<=\()[^()]*(?=\))/)
# => ["suspension sensor", "susp sensor", "height control sensor", "height sensor", "level control sensor", "rear height sensor", "ride height sensor"]