0

私はいくつかの解決策を見て、次のコードを思いついた。私の希望する結果は100.02です。必要な結果は常に「mylaunchduration=」「mins」の間にあります

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、しないでください。キャプチャは内部またはです。substMatchData$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」ではない1つの文字を意味します。

目的のテキストに一致させるには、次のようにしてみてください。

/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 に答える