使用单个正则表达式从json中提取多个值

时间:2017-08-27 13:26:16

标签: regex rainmeter

我尝试在单个正则表达式中获取多个值。我有一个小提琴:http://fiddle.re/tuaddd

我需要能够获取以下json并提取4个值:

[
    {
        "id": "bitcoin", 
        "name": "Bitcoin", 
        "symbol": "BTC", 
        "rank": "1", 
        "price_usd": "4344.21", 
        "price_btc": "1.0", 
        "24h_volume_usd": "1503030000.0", 
        "market_cap_usd": "71799147986.0", 
        "available_supply": "16527550.0", 
        "total_supply": "16527550.0", 
        "percent_change_1h": "-0.29", 
        "percent_change_24h": "1.01", 
        "percent_change_7d": "5.32", 
        "last_updated": "1503839363"
    }
]

我需要提取的值是:

  • price_usd
  • percent_change_1h
  • percent_change_24h
  • percent_change_7d

使用price_usd": "(.+?)"非常适合提取单个值,但当我尝试使用price_usd": "(.+?)"[.+?]percent_change_1h": "(.+?)"拉2时,似乎无法提取任何值。我怎样才能以最有效的方式做到这一点?

更新 - 我正在构建一个显示加密货币的Rainmeter皮肤。所以我需要能够做到这一点的perl正则表达式,因为我可以做的事情有限,因为它与他们已有的现有插件有关。例如,这里有什么:

[MeasureBTC]
Measure=Plugin
Plugin=WebParser
URL=https://api.coinmarketcap.com/v1/ticker/bitcoin/
RegExp=price_usd": "(.+?)"

[MeasureBTCUSDValue]
Measure=Plugin
Plugin=WebParser
URL=[MeasureBTC]
StringIndex=1

正如您所看到的,我基本上需要一个1-liner才能完成此任务,因为我没有使用任何编程语言。

1 个答案:

答案 0 :(得分:0)

这个问题的解决方案是这样的:

RegExp=(?siU)price_usd": "(.*)".*percent_change_1h": "(.*)".*percent_change_24h": "(.*)".*percent_change_7d": "(.*)"