首页 > 解决方案 > Ruby:从字符串中获取不同的子字符串并放入变量中

问题描述

我在文本文件中有以下字符串:

细绳:

38561 2914 55532, (aggregated by 55532 202.52.118.114)

使用 ruby​​,我如何读取上面的字符串并执行以下操作:

  1. 仅从行中提取子字符串55532并放入aggregator变量中?
  2. 提取38561 2914 55532并放入paths变量?

我正在尝试使用string.scan和的组合,string.split但运气并不好。我想提取的所有子字符串在现实生活中都会发生变化,但它们始终是整数。我特别努力地aggregator填充变量(任务 1) - 试图找到一种方法来获取它,以开始[aggregated by ]和结束,[ ]但到目前为止无法让它工作。任务 2(paths变量)我可以使用正则表达式实现,但如果有意义的话,尝试在一次读取/扫描中同时执行任务 1 和任务 2。

有任何想法吗?

欣赏它,J

标签: ruby

解决方案


如果字符串以三个整数开头,您可以像这样使用scaneach_slice

irb> str = '38561 2914 55532, (aggregated by 55532 202.52.118.114)'
irb> paths, aggregator = str.scan(/\d+(?=[ ,])/).each_slice(3).to_a
irb> paths
=> ["38561", "2914", "55532"]
irb> aggregator
=> ["55532"]

或者:

arr = str.scan(/\d+(?=[ ,])/)
paths, aggregator = [arr[0..-2], [arr[-1]]]

推荐阅读