0

我看到了一些解决方案并提出了以下代码。我想要的结果是100.02。所需的结果始终在“我的启动持续时间=”“分钟”之间

mystring ='2012-07-11 22:30:33,536  INFO: 00/00/164/ABCTimeTest: my launch duration= 100.02 mins|z-vndn'
mypattern = /^.*=([^mins]*)/
subst = mystring.match(mypattern)
puts subst

使用上述代码输出: 2012-07-11 22:30:33,536 信息:00/00/164/ABCTimeTest:我的启动持续时间= 100.02

我的模式有什么问题?用我对这种模式的理解纠正我。

#/
#^.*=             ## move from start till = (now I have reached till '=')
#([^mins])        ## capture somethings that starts with mins (thats my 100.2)
#/
4

4 回答 4

1

这对我来说可以。不要puts subst,因为subst包含MatchData对象。捕获在内部$1subst[1]

mystring ='2012-07-11 22:30:33,536  INFO: 00/00/164/ABCTimeTest: my launch duration= 100.02 mins|z-vndn'
mypattern = /^.*=([^mins]*)/
subst = mystring.match(mypattern)

# Contains extra whitespace, so call .strip
puts $1.strip
# 100.02

# Or ...
puts subst[1].strip
# 100.02

要获得100.02没有额外空格的 ,您可以使用以下内容:

mypattern = /^.*=\s*([^\smins]*)/
于 2012-07-12T19:57:44.473 回答
1

您的模式是正确的,但您没有正确使用结果。subst是一个匹配对象,而不是捕获的内容。你想要的是:

# Show first captured result
puts subst[1]
于 2012-07-12T19:58:54.753 回答
1

[^mins]不匹配任何不是确切字符串的字符序列mins。它实际上意味着一个不是“m”、“i”、“n”或“s”的单个字符。

要匹配所需的文本,请尝试以下操作:

/my launch duration= ([0-9.]*) mins/

这意味着匹配一个 0-9 的序列和一个句点任意次数,但它必须在my launch duration=和之间mins

于 2012-07-12T20:00:24.137 回答
0

我会使用一些简单的东西,例如:

mystring ='2012-07-11 22:30:33,536  INFO: 00/00/164/ABCTimeTest: my launch duration= 100.02 mins|z-vndn'
mystring[/(\S+) mins/, 1] # => "100.02"
于 2012-07-12T22:46:05.803 回答