使用正则表达式从 1 行字符串中提取数字

Extract numbers from a 1 line string using regex

我有一个看起来像这样的单行字符串:

{"took":125,"timed_out":false,"_shards":{"total":10,"successful":10,"skipped":0,"failed":0}}{"took":365,"timed_out":false,"_shards":{"total":10,"successful":10,"skipped":0,"failed":0}}{"took":15,"timed_out":false,"_shards":{"total":10,"successful":10,"skipped":0,"failed":0}}

我想提取“take”部分后的所有数字,所以在我的例子中,输出如下所示:

125
365
15

到目前为止我尝试过的是使用 took":(\d{1,6}),"(.*) 作为正则表达式。但由于它是一个单行字符串,它只提取第一次出现而忽略其他。

您可以使用

查找内容took":(\d+)|(?s)(?:(?!took":\d).)*
替换为(?{1}\n)

详情:

  • took": - 文字
  • (\d+) - 捕获到第 1 组的一个或多个数字
  • | - 或
  • (?s) - 开启 DOTALL 模式(. 现在匹配换行字符)
  • (?:(?!took":\d).)* - 任何单个字符,零次或多次,尽可能多,不启动 took": + 数字字符序列。

(?{1}\n)条件替换模式这样替换:

  • (?{1} - 如果第 1 组匹配
    • \n - 用组 1 和换行符替换匹配项
  • ) - 否则,替换为空字符串。