Ruby 当字符串标记不是全部数字时,如何拆分它?

Ruby 当字符串标记不是全部数字时,如何拆分它?,ruby,regex,split,Ruby,Regex,Split,如果令牌的形式是“一个数字,一个点(“.”),然后是非数字”,我想在数组中拆分令牌。如果代币的形式是:“数字,点,数字”,我不想分割它。我以为这样就行了 tokens.flat_map {|o| o.scan(/^\d+\.|[a-z]+/i) } 表达式在这种情况下正常工作: tokens = ["44.WORD"] tokens.flat_map {|o| o.scan(/^\d+\.|[a-z]+/i) } # => ["44.", "WORD"] 但该表达式似乎切断了标记,如

如果令牌的形式是“一个数字,一个点(“.”),然后是非数字”,我想在数组中拆分令牌。如果代币的形式是:“数字,点,数字”,我不想分割它。我以为这样就行了

tokens.flat_map {|o| o.scan(/^\d+\.|[a-z]+/i) }
表达式在这种情况下正常工作:

tokens = ["44.WORD"]
tokens.flat_map {|o| o.scan(/^\d+\.|[a-z]+/i) }
# => ["44.", "WORD"] 
但该表达式似乎切断了标记,如下所示:

tokens = ["72.9"]
tokens.flat_map {|o| o.scan(/^\d+\.|[a-z]+/i) }
# => ["72."] 
我如何调整我的正则表达式,以便如果标记是一个数字、一个点和一个数字,我保持原样,否则将它一分为二?

试试这个

tokens.flat_map { |token| token =~ /[a-z]/i ? token.split('.') : token }

这不会调整您的regexp,但有时使用Ruby比将所有内容塞进regexp更容易。而且通常也更具可读性。

由于您对拆分位置有明确的概念,请使用
split
而不是
scan

["44.WORD"].flat_map{|s| s.split(/(?<=\d\.)(?=\D)/)}
# => ["44.", "WORD"]

["72.9"].flat_map{|s| s.split(/(?<=\d\.)(?=\D)/)}
# => ["72.9"]
[“44.WORD”].flat|u map{s | s.split(/(?[“44.”,“WORD”]
[72.9]。平面地图{s{s.split(/(?[“72.9”]