我正在捕获某一列数据,我需要使用正则表达式将该列分成三个不同的组捕获。我搜索过谷歌,只能使用Java或其他代码来完成。
使用以下输出:
common: "mortalkombat_sonia_rules_abc," player: "Mortal Kombat," 22-May- 22
Test1 Test2 Type1 Type2 Type3 X Y HOR1 VER1 Data1 Error1
Whitea ab-1 abcr0201 222 22 -222 -22 -222 -22 2 2 Testing
Whiteb ab-1 abcr0201 222 22 -222 -22 -222 -22 2 2 Testing
greya ab-1 abcf0402 222 2 -222 -22 -222 -22 2 2 Testing
blacka ab-1 abcd0402 222 22 -222 -22 -222 -22 2 2 Testing
我需要从“Test1”列中提取3组数据,我目前正在使用:
^(?<testTest1>[^\s]+)*\s*[^\s]*\s*(?<testType1>[^\s]+)\s*(?<testType2>\d+)
,输出为:
whitea
whiteb
greya
blacka
这是否只能使用正则表达式?如果是的话我怎么能这样做?
whitea greya blacka
whiteb
仅供参考:我正在使用expresso应用程序进行测试,并且在底部的设计模式中忽略白色,并检查多行超出标准编译和文化不变量
答案 0 :(得分:0)
很难理解你想要什么。您的问题似乎并不是将一个列分为三组
我想知道你是否想要将第一列的值根据它们的值除以最后一个字符分成组?
这将为您做到这一点
use strict;
use warnings 'all';
use List::Util 'max';
<DATA> for 1, 2; # Drop header lines
my %data;
my @groups;
while ( <DATA> ) {
my ($test1) = split ' ', $_, 2;
my $group = substr $test1, 0, -1;
push @groups, $group unless $data{$group};
push @{ $data{$group} }, $test1;
}
my $w = max map length, map @$_, values %data;
my $rows = max map { scalar @$_ } values %data;
my $fmt = join(' ', ( "%-${w}s" ) x keys %data) . "\n";
for my $i ( 0 .. $rows-1 ) {
printf $fmt, map { $_->[$i] // '' } map { $data{$_} } @groups;
}
__DATA__
common: "mortalkombat_sonia_rules_abc," player: "Mortal Kombat," 22-May- 22
Test1 Test2 Type1 Type2 Type3 X Y HOR1 VER1 Data1 Error1
Whitea ab-1 abcr0201 222 22 -222 -22 -222 -22 2 2 Testing
Whiteb ab-1 abcr0201 222 22 -222 -22 -222 -22 2 2 Testing
greya ab-1 abcf0402 222 2 -222 -22 -222 -22 2 2 Testing
blacka ab-1 abcd0402 222 22 -222 -22 -222 -22 2 2 Testing
Whitea greya blacka
Whiteb