我如何告诉我的正则表达式从字符串数组中选择?
How do I tell my regex to pick from an array of strings?
我正在使用 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 数组中的任何字符串,因此应该会失败。如何重写我的正则表达式,使其只匹配我想要的内容?
通过将 #{Regexp.union(TOKENS)}
包含在字符 class、[(?-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+/
我正在使用 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 数组中的任何字符串,因此应该会失败。如何重写我的正则表达式,使其只匹配我想要的内容?
通过将 #{Regexp.union(TOKENS)}
包含在字符 class、[(?-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+/