有没有办法在Ruby on Rails中将正则表达式更改为一系列数字?

我经常需要在正则表达式中创建数字范围。 因此,例如'[2-3] [0-9]’是20-39之间的数字范围。 要仔细检查我的范围,我通常使用Linux命令。 对于'[2-3] [0-9]’,Linux命令将是:

seq 1 40|egrep '[2-3][0-9]' 

为我打印所有数字。

Ruby on Rails中是否有类似“seq 1 40 | egrep”的内容可以为我打印数字?

这将是非常方便的,因为我更喜欢一个很好的GUI,我可以在Rails中创建自己。

如果你担心它,你应该写一个unit testing。

要快速测试你的正则表达式,使用irb并编写普通的旧Ruby:

 irb(main):005:0> (1..40).map(&:to_s).grep(/[2-3][0-9]/) => ["20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39"] 

也就是说,通过正则表达式过滤整个序列,有更好的方法来产生数字范围。 事实上,这可能是最糟糕的做法。

 (20..39).to_a 

要么

 20.upto(39).to_a 

要么

 20.times.map { |i| 20 + i } 

还有很多很多很多。 它们都比使用正则表达式将一组更大的数字过滤到只需要构建简单顺序范围所需的数字一样无限

使用正则表达式来查看某个数字是否在某个范围内,首先是代码味道。 你采取了错误的方法(除非你正在做代码高尔夫或其他一些hacky事情)。 您不应该尝试构建一个旨在匹配特定范围内的数字的正则表达式。

我建议你不要使用正则表达式来检查部分。 相反,只是按原样提取数字(使用正则表达式),并以更直接的方式查看它是否在范围内。 假设你有一个字符串s 。 在正则表达式中使用(\d+)提取它的数字部分。 然后取出那部分(如果它是正则表达式中的第一个括号,那么它是$1 ),将其转换为数字,并检查它是否适合该范围。

 (20..39).cover?($1.to_i)