首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ruby on Rails中,有没有一种方法可以将正则表达式更改为一系列数字?

在Ruby on Rails中,有没有一种方法可以将正则表达式更改为一系列数字?
EN

Stack Overflow用户
提问于 2014-03-10 21:53:20
回答 2查看 120关注 0票数 0

我经常需要在正则表达式中创建一系列数字。因此,例如'2-3‘是20-39之间的数字范围。为了仔细检查我的范围,我通常使用Linux命令。对于'2-3‘,Linux命令是:

代码语言:javascript
复制
seq 1 40|egrep '[2-3][0-9]' 

它会为我打印所有的数字。

在Ruby on Rails中有类似于"seq 1 40|egrep“的东西可以为我打印数字吗?

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

EN

回答 2

Stack Overflow用户

发布于 2014-03-10 21:58:10

如果你关心它,你应该写一个单元测试。

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

代码语言:javascript
复制
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"]

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

代码语言:javascript
复制
(20..39).to_a

代码语言:javascript
复制
20.upto(39).to_a

代码语言:javascript
复制
20.times.map { |i| 20 + i }

还有更多,更多。它们都比使用正则表达式将一组更大的数字过滤成您需要的数字来构建一个简单的序列范围要好得多。

票数 2
EN

Stack Overflow用户

发布于 2014-03-10 22:16:46

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

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

代码语言:javascript
复制
(20..39).cover?($1.to_i)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22302124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档