gpt4 book ai didi

regex - 我如何跟踪某些元素所属的分组?

转载 作者:行者123 更新时间:2023-12-01 10:47:46 25 4
gpt4 key购买 nike

我为这个粗制滥造的标题道歉;我不知道如何正确描述我遇到的问题。

我有多个以下格式的制表符分隔文件:

groupA    donuts     apples
groupB car dog ball meter
groupC apples donuts car
groupD ball shirt pencil paper donuts

具有不同的行数。

对于每一行,第一个单词是组名,而其余行是对象的名称。我想要做的是跟踪每个对象所属的组。所以在这个例子中,我会发现 ballgroupDgroupB 的一部分,而 car 只是一部分C 组applesgroupAgroupC 的一部分,而 pencil 只是 groupD 的一部分。

由于我正在阅读的每个文件都有不同数量的行/组,完成此操作的最佳方法是什么?

#!/usr/bin/perl
use strict;
use warnings;

my $path = "../GENELIST.symbols.csv";
open(PATH, $path) || die "cannot open csv\n";
my @groups = ();
while(my $line = <PATH>){
if($line =~ /^(\w+)\t/){
push(@groups, $1);
}
}
close(PATH);
#at this point I have the name of all the groups in the particular file (`groupA`, `groupB`, `groupC`, `groupD`).

最佳答案

只需使用数组的散列。

要更熟悉此类结构,请查看:Perl Data Structures Cookbook

use strict;
use warnings;

my %groups;

while (<DATA>) {
my ($group, @cols) = split;
push @{$groups{$_}}, $group for @cols;
}

use Data::Dump;
dd \%groups;

__DATA__
groupA donuts apples
groupB car dog ball meter
groupC apples donuts car
groupD ball shirt pencil paper donuts

输出:

{
apples => ["groupA", "groupC"],
ball => ["groupB", "groupD"],
car => ["groupB", "groupC"],
dog => ["groupB"],
donuts => ["groupA", "groupC", "groupD"],
meter => ["groupB"],
paper => ["groupD"],
pencil => ["groupD"],
shirt => ["groupD"],
}

关于regex - 我如何跟踪某些元素所属的分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24086703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com