正则表达式为ruby中的一系列数字

时间:2013-04-10 15:56:58

标签: ruby regex

我正在尝试匹配下面给出的模式

pattern: file.update.20120304.xml
     file.update.1.xml
     file.update.201203040002.xml

如果我必须匹配留下数字file.update..xml的模式 我怎么能用红宝石做什么?

3 个答案:

答案 0 :(得分:2)

"file.update.20120304.xml"[/\d+/]     # => "20120304"
"file.update.1.xml"[/\d+/]            # => "1"
"file.update.201203040002.xml"[/\d+/] # => "201203040002"

答案 1 :(得分:1)

您可以使用Regexpgsub来提取数字

filename = 'file.update.20120304.xml'
numbers = filename.gsub(/\Afile\.update\.(\d+)\.xml\z/, '\1')

使用的正则表达式如下:

  • 第一部分file\.update\.,以确保您拥有“file.update”
  • 中间部分([0-9]+)有一个或多个号码
  • 结尾部分\.xml,确保最后有“.xml”
  • 锚点\A\z表示字符串的开头和结尾

中间部分用()包装成Regexp变量,您可以在替换字符串中重用\1

使用variableName[/regular expression/]

进行更新
filename = 'file.update.20120304.xml'
numbers = filename[/\Afile\.update\.(\d+)\.xml\z/, 1]

它返回第一个捕获的组,即()之间。

答案 2 :(得分:1)

p "file.update.201203040002.xml".split(".") .map { |x|  x if x.to_i != 0}.compact[0].to_i
#=> 201203040002
p "file.update.20120304.xml".split(".") .map { |x|  x if x.to_i != 0}.compact[0].to_i
#=> 20120304