Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将类似Lisp的字符串转换为Ruby数组_Ruby_Regex_Parsing - Fatal编程技术网

将类似Lisp的字符串转换为Ruby数组

将类似Lisp的字符串转换为Ruby数组,ruby,regex,parsing,Ruby,Regex,Parsing,我有这样一个字符串: 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) (con

我有这样一个字符串:

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 == ''}
我认为一定有更好的方法来实现这一点,如果你去掉
内容:
前缀和
+
~\d
片段,那么它就像一个Lisp表达式。

s.gsub(/\(内容:([^(]*)\)/,'\1')。扫描(/(?[“悬架传感器”,“悬架传感器”,“高度控制传感器”,“高度传感器”,“高度控制传感器”、“后高度传感器”、“行驶高度传感器”]
s.gsub(/\(content:([^(]*)\)/, '\1').scan(/(?<=\()[^()]*(?=\))/)

# => ["suspension sensor", "susp sensor", "height control sensor", "height sensor", "level control sensor", "rear height sensor", "ride height sensor"]

有趣的格式。
~n
指示符似乎是多余的(因为括号已经确定了分组的数量)?或者它们是否增加了任何进一步的意义?并且您似乎想忽略上面的任何其他结构?可以解析正常编写的S表达式(sexps)进入数组。@mbrach~2是一个“增强”。@RoryO'Kane我也会看一看Sexpistol,不过我认为我只需要一个简单的正则表达式。这看起来很完美。我只是想用scan找到一些东西,但这一点很关键:([^(]*)。再次感谢。