如何使用正则表达式将捕获的列拆分为3组?

时间:2016-07-13 15:49:12

标签: .net regex

我正在捕获某一列数据,我需要使用正则表达式将该列分成三个不同的组捕获。我搜索过谷歌,只能使用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应用程序进行测试,并且在底部的设计模式中忽略白色,并检查多行超出标准编译和文​​化不变量

1 个答案:

答案 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