我经常需要在正则表达式中创建一系列数字。因此,例如'2-3‘是20-39之间的数字范围。为了仔细检查我的范围,我通常使用Linux命令。对于'2-3‘,Linux命令是:
seq 1 40|egrep '[2-3][0-9]' 它会为我打印所有的数字。
在Ruby on Rails中有类似于"seq 1 40|egrep“的东西可以为我打印数字吗?
这将非常方便,因为我更喜欢一个很好的GUI,这样我就可以在Rails中创建自己。
发布于 2014-03-10 21:58:10
如果你关心它,你应该写一个单元测试。
要快速测试您的正则表达式,请使用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 }还有更多,更多。它们都比使用正则表达式将一组更大的数字过滤成您需要的数字来构建一个简单的序列范围要好得多。
发布于 2014-03-10 22:16:46
首先,使用正则表达式查看一个数字是否在某个范围内是一种代码气味。你采用了错误的方法(除非你在做代码、高尔夫或其他一些老生常谈的事情)。您不应该尝试构建一个旨在匹配某个范围内的数字的正则表达式。
我建议您不要将正则表达式用于检查部分。相反,只需按原样提取数字(使用正则表达式),并以更直接的方式查看它是否在某个范围内。假设你有一个字符串s。在正则表达式中使用(\d+)提取其中的数字部分。然后取出该部分(如果它是正则表达式中的第一个括号,那么它就是$1),将其转换为一个数字,并检查它是否符合范围。
(20..39).cover?($1.to_i)https://stackoverflow.com/questions/22302124
复制相似问题