Ruby 提取正则表达式中的字符串
我对Ruby有点陌生,但我对Ruby中的正则表达式有一个问题 我有一个字符串,我想将字符串中的数字保存在一个新变量中,只保存数字。 红宝石是一种粉红色到血红色的宝石,是一种刚玉(氧化铝)矿物的变种。 我的文本列表Ruby 提取正则表达式中的字符串,ruby,regex,string,Ruby,Regex,String,我对Ruby有点陌生,但我对Ruby中的正则表达式有一个问题 我有一个字符串,我想将字符串中的数字保存在一个新变量中,只保存数字。 红宝石是一种粉红色到血红色的宝石,是一种刚玉(氧化铝)矿物的变种。 我的文本列表 ruby is a pink to blood-red colored gemstone, a variety8of the mineral corundum (aluminium oxide). 我的正则表达式是: /blood-red colored gemstone, a v
ruby is a pink to blood-red colored gemstone, a variety8of the mineral corundum (aluminium oxide).
我的正则表达式是:
/blood-red colored gemstone, a variety(.*?)of the mineral corundum/m
现在我想将结果保存在一个新变量中。让我们说:
var1 = 'ruby is a pink to blood-red colored gemstone, a variety8of the mineral corundum (aluminium oxide).'
及
现在结果是血红的整句话。。。到矿物刚玉。
但是我怎样才能在没有边界的情况下进入中东呢。在Rubular中,它显示为一个“组”(在我的例子中,我希望访问句子中的数字)。我如何才能访问此组
你可以看我在Rubular的例子
非常感谢来自:
如果提供了Regexp,则字符串的匹配部分为
返回如果捕获遵循正则表达式,则可能是
捕获组索引或名称,遵循
将返回MatchData的组件。
因此,这应该是可行的:
var2 = var1[/blood-red colored gemstone, a variety(.*?)of the mineral corundum/m, 1]
# => "8"
在Ruby中,每个组都存储在一个匹配项中。如果显式使用,将返回一个,您可以访问匹配项
s = "ruby is a pink to blood-red colored gemstone, a variety8of the mineral corundum (aluminium oxide)."
r = /blood-red colored gemstone, a variety(.*?)of the mineral corundum/m
m = s.match(r)
m[1]
=> "8"
或
有几个快捷方式,或多或少可读。例如,您可以使用String#slice
s.slice(r, 1)
=> "8"
还是全局变量
if s =~ m
# $1 is the first match
$1
end
如果您100%确定输入匹配,则
slice
是一个不错的选择。如果您需要执行某种测试,那么您可能需要检查是否出现匹配。OMG。完美的这个社区非常快。谢谢你。我假设一的意思是,它应该从里面的“result”字符串中取第一个字符,对吗?不,如果你想要一个数字,你会想解析它:var2.to_i
接收8
是。我知道以后我必须把它转换成整数。但是如果我测试它,里面有更多的数字,正则表达式中的1给了我整个字符串。是的,如果你想要…variety18of…
的结果是1
,你可以选择第一个字符,或者将表达式改为。。。各种各样的(.?)。
s.slice(r, 1)
=> "8"
if s =~ m
# $1 is the first match
$1
end