ruby中数列的正则表达式

ruby中数列的正则表达式,ruby,regex,Ruby,Regex,我正在尝试匹配下面给出的模式 pattern: file.update.20120304.xml file.update.1.xml file.update.201203040002.xml 如果我必须匹配离开数字文件.update..xml的模式 在ruby中我该怎么做?您可以使用和来提取数字 filename = 'file.update.20120304.xml' numbers = filename.gsub(/\Afile\.update\.(\d+)\.xml\

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

pattern: file.update.20120304.xml
     file.update.1.xml
     file.update.201203040002.xml
如果我必须匹配离开数字文件.update..xml的模式 在ruby中我该怎么做?

您可以使用和来提取数字

filename = 'file.update.20120304.xml'
numbers = filename.gsub(/\Afile\.update\.(\d+)\.xml\z/, '\1')
使用的regexp由以下部分组成:

  • 第一部分
    文件\.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]

它返回第一个捕获的组,即介于
()

什么是源字符串和您想要的确切输出之间?您已经尝试了什么?有你?它有一些有用的例子。@RubyLovely我假设他们想从
文件.update.201203040002.xml
中提取
201203040002
,但这是一个非常好的问题。太棒了,我从来不知道,ppl会在堆栈溢出时反应如此之快…我很惊讶..谢谢大家,而且你的代码工作得非常好。。我可能会收到像我提到的模式一样的文件名,但我只想匹配,在文件名中保留字符,或者你可以使用
\d+
@Krish我已经更新了我的答案来提取数字,我不知道这个符号。谢谢。但是regexp是错误的,因为
“file.1545.update.1.xml”[/\d+/]
返回第一次出现的
1545
@toch
“file.1545.update.1.xml”
来自哪里?为什么regexp错误?它是另一个不遵循模式的字符串。我想,在那种情况下,什么都不应该被退回。但也许我错了。+1对于语法,它看得不够。@iain我对
regex
不在行,因此总是试图绕过它;):)。它返回第一个数字组。使用
“file.24554.update.20120304.xml”
您将获得
24554
。对我来说,它不应该为那个案例返回任何东西。@toch-umm,我认为OP所要求的对他/她有用。如果他需要你的例子,可以修改它。:)
"file.update.20120304.xml"[/\d+/]     # => "20120304"
"file.update.1.xml"[/\d+/]            # => "1"
"file.update.201203040002.xml"[/\d+/] # => "201203040002"
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