2012-02-03 24 views
1

我的字符串看起來是這樣的:如何使用正則表達式從標籤之後提取價格?

 
Rental DurationPrice60-day$47.8090-day$56.23120-day$60.92 

 
Rental DurationPrice90-day$47.80180-day$56.23 

的任意組合:

 
30-day and/or 60-day and/or 90-day and/or 180-day 

我想拍攝後面的價格這些時間框架。

回答

2

這個正則表達式捕獲所有nn-day字段後面的價格。

/(?:30|60|180)-day\$(\d+\.\d\d)/ 

使用它作爲

prices = "Rental DurationPrice60-day$47.8090-day$56.23120-day$60.92" 
prices.scan(/(?:30|60|180)-day\$(\d+\.\d\d)/) 

所有的價格獲取到一個數組。

0

此正則表達式將捕獲所有價格:(?:\d{2,}-day\$(\d+\.\d{2}))

1

而不是使用更復雜的正則表達式,我會跟String.scan去,讓它走過的字符串:

'Rental DurationPrice60-day$47.8090-day$56.23120-day$60.92'.scan(/\$[\d.]+/) 
[ 
    [0] "$47.8090", 
    [1] "$56.23120", 
    [2] "$60.92" 
] 

如果你不」不想貨幣指標可以後置處理的值,剝離的第一個字符:

'Rental DurationPrice60-day$47.8090-day$56.23120-day$60.92'.scan(/\$[\d.]+/).map{ |s| s[1..-1] } 
[ 
    [0] "47.8090", 
    [1] "56.23120", 
    [2] "60.92" 
] 

或者使用一個微小的不同正則表達式與flatten方法:

'Rental DurationPrice60-day$47.8090-day$56.23120-day$60.92'.scan(/\$([\d.]+)/).flatten 
[ 
    [0] "47.8090", 
    [1] "56.23120", 
    [2] "60.92" 
] 
相關問題