我正在使用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数组中的任何字符串,因此事情应该失败。如何重写我的正则表达式,使它只匹配我想要的?
答案 0 :(得分:2)
将#{Regexp.union(TOKENS)}
括在一个字符类[(?-mix:of|\/)]
中,使其匹配一个字符(
,字符范围从?
到m
,i
等。?
和m
之间的范围匹配:
请参阅what parts of the string each part of your regex matches:
因此,[(?-mix:of|\/)]
在您的输入字符串中匹配F
。
您需要删除[
和]
:
re = /\d+[[:space:]]*#{Regexp.union(TOKENS)}[[:space:]]*\d+/
请参阅Ruby demo