如何告诉我的正则表达式从一个字符串数组中挑选?

时间:2017-08-11 18:09:21

标签: regex ruby-on-rails-5 gsub

我正在使用Rails 5.我想用一个任意数量的数字字符串,一个可选的空格数,一个字符串数组中的一个标记,一个可选的空格数和一个任意数量的数字。所以,例如,这将匹配我的模式......

123 / 2221111

或者

 102849/222

所以我认为我的正则表达式应该是

re = /\d+[[:space:]]*[#{Regexp.union(TOKENS)}][[:space:]]*\d+/

但以下是匹配不符合标准的内容......

2.4.0 :015 > re = /\d+[[:space:]]*[#{Regexp.union(TOKENS)}][[:space:]]*\d+/
 => /\d+[[:space:]]*[(?-mix:of|\/)][[:space:]]*\d+/
2.4.0 :016 > TOKENS
 => ["of", "/"]
2.4.0 :017 > name = "10F 2017"
 => "10F 2017"
2.4.0 :018 > name.gsub!(re, '#')
 => "#"

字符串“10F 2017”不包含我的TOKENS数组中的任何字符串,因此事情应该失败。如何重写我的正则表达式,使它只匹配我想要的?

1 个答案:

答案 0 :(得分:2)

#{Regexp.union(TOKENS)}括在一个字符类[(?-mix:of|\/)]中,使其匹配一个字符(,字符范围从?mi等。?m之间的范围匹配:

enter image description here

请参阅what parts of the string each part of your regex matches

enter image description here

因此,[(?-mix:of|\/)]在您的输入字符串中匹配F

您需要删除[]

re = /\d+[[:space:]]*#{Regexp.union(TOKENS)}[[:space:]]*\d+/

请参阅Ruby demo