ruby如何匹配子字符串

ruby如何匹配子字符串,ruby,regex,Ruby,Regex,我有一个这样的文本文件 ....(omission) ec2-123.compute-1.amazonaws.com : ok=333 .... PLAY RECAP ********************************************************************* ec2-123.compute-1.amazonaws.com : ok=16 changed=2 unreachable=0 failed=0 ec2-456.

我有一个这样的文本文件

....(omission)
ec2-123.compute-1.amazonaws.com : ok=333

....

PLAY RECAP   *********************************************************************
ec2-123.compute-1.amazonaws.com : ok=16   changed=2    unreachable=0    failed=0   
ec2-456.compute-1.amazonaws.com : ok=11   changed=0    unreachable=0    failed=0   
ec2-766.compute-1.amazonaws.com : ok=40   changed=15   unreachable=0    failed=0   
localhost                  : ok=0    changed=0    unreachable=0    failed=0  

...(omission)
ec2-123.compute-1.amazonaws.com : ok=1231
..
如何在PLAY RECAP和localhost之间获取内容 并根据主机名的follow值ok=,对主机名进行排序,如
ec2-123.compute-1.amazonaws.com

像这样的散列输出

{"ec2-123.compute-1.amazonaws.com" => 16,"ec2-456.compute-1.amazonaws.com" => 11,"ec2-766.compute-1.amazonaws.com" => 40,}

要从整个文件中获取输入,请执行以下操作:

▶ input = input[/PLAY RECAP.*?^(.+?)^localhost/m, 1]
要对结果进行哈希化,请执行以下操作:

▶ input.scan(/(\S+) : ok=(\w+)/).to_h
#⇒ {
#  "ec2-123.compute-1.amazonaws.com" => "16",
#  "ec2-456.compute-1.amazonaws.com" => "11",
#  "ec2-766.compute-1.amazonaws.com" => "40"
# }
按主机名排序(thx Wiktor Stribiżew用于提醒。)


您尝试过什么吗?可能是。看,按照主机名的follow值对主机名进行排序,如ec2-123.compute-1.amazonaws.com ok=-您的解决方案没有考虑到这一点。@WiktorStribiżew确实如此。现在可以了。对不起,我的错误,省略的单词可能包含
ec2-123.compute-1.amazonaws.com:ok=333
像这样的字符串请查看更新。
input.scan(/(\S+) : ok=(\w+)/)
     .to_h
     .sort_by { |k, _| k[/(?<=ec2-)\d+/].to_i }
input.scan(/(\S+) : ok=(\w+)/)
     .to_h
     .sort_by { |_, ok| ok.to_i }