Regex 使用正则表达式进行数组拆分

Regex 使用正则表达式进行数组拆分,regex,arrays,perl,hash,Regex,Arrays,Perl,Hash,我有一个只包含一个字符串的数组,它是哈希值: %hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"]) 如何从哈希值中拆分“unit”-s并将其保存到数组中 新阵列应如下所示: @array=["Value1", "Value2", "Value3"] 我试过这样做: @array=split(/\s\w\(\w\)\,/, $hash{key}); 用逗号分隔字符串,然后在末尾去掉该单元 map(s/\s.*$

我有一个只包含一个字符串的数组,它是哈希值:

%hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"])
如何从哈希值中拆分
“unit”
-s并将其保存到数组中

新阵列应如下所示:

@array=["Value1", "Value2", "Value3"]
我试过这样做:

@array=split(/\s\w\(\w\)\,/, $hash{key});

用逗号分隔字符串,然后在末尾去掉该单元

map(s/\s.*$//, @array = split(/,\s*/, $hash{'key'}[0]));

用逗号分隔字符串,然后在末尾去掉该单元

map(s/\s.*$//, @array = split(/,\s*/, $hash{'key'}[0]));

用逗号分隔字符串,然后在末尾去掉该单元

map(s/\s.*$//, @array = split(/,\s*/, $hash{'key'}[0]));

用逗号分隔字符串,然后在末尾去掉该单元

map(s/\s.*$//, @array = split(/,\s*/, $hash{'key'}[0]));
还有一个选择:

use strict;
use warnings;
use Data::Dumper;


my %hash = ("key"=>["1567 I(u), 2070 I(m), 2.456e-2 V(m), 417 ---, 12 R(k),"]);
my @array =  $hash{'key'}->[0] =~ /(\S+)\s+\S+,?/g;
print Dumper \@array;
my %hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"]);

my $i;
my @array = grep { ++$i % 2 } split /,?\s/, $hash{key}->[0];

$, = "\n";
print @array;
输出:

$VAR1 = [
          '1567',
          '2070',
          '2.456e-2',
          '417',
          '12'
        ];
还有一个选择:

use strict;
use warnings;
use Data::Dumper;


my %hash = ("key"=>["1567 I(u), 2070 I(m), 2.456e-2 V(m), 417 ---, 12 R(k),"]);
my @array =  $hash{'key'}->[0] =~ /(\S+)\s+\S+,?/g;
print Dumper \@array;
my %hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"]);

my $i;
my @array = grep { ++$i % 2 } split /,?\s/, $hash{key}->[0];

$, = "\n";
print @array;
输出:

$VAR1 = [
          '1567',
          '2070',
          '2.456e-2',
          '417',
          '12'
        ];
还有一个选择:

use strict;
use warnings;
use Data::Dumper;


my %hash = ("key"=>["1567 I(u), 2070 I(m), 2.456e-2 V(m), 417 ---, 12 R(k),"]);
my @array =  $hash{'key'}->[0] =~ /(\S+)\s+\S+,?/g;
print Dumper \@array;
my %hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"]);

my $i;
my @array = grep { ++$i % 2 } split /,?\s/, $hash{key}->[0];

$, = "\n";
print @array;
输出:

$VAR1 = [
          '1567',
          '2070',
          '2.456e-2',
          '417',
          '12'
        ];
还有一个选择:

use strict;
use warnings;
use Data::Dumper;


my %hash = ("key"=>["1567 I(u), 2070 I(m), 2.456e-2 V(m), 417 ---, 12 R(k),"]);
my @array =  $hash{'key'}->[0] =~ /(\S+)\s+\S+,?/g;
print Dumper \@array;
my %hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"]);

my $i;
my @array = grep { ++$i % 2 } split /,?\s/, $hash{key}->[0];

$, = "\n";
print @array;
输出:

$VAR1 = [
          '1567',
          '2070',
          '2.456e-2',
          '417',
          '12'
        ];
还有另一个选择:

use strict;
use warnings;
use Data::Dumper;


my %hash = ("key"=>["1567 I(u), 2070 I(m), 2.456e-2 V(m), 417 ---, 12 R(k),"]);
my @array =  $hash{'key'}->[0] =~ /(\S+)\s+\S+,?/g;
print Dumper \@array;
my %hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"]);

my $i;
my @array = grep { ++$i % 2 } split /,?\s/, $hash{key}->[0];

$, = "\n";
print @array;
还有另一个选择:

use strict;
use warnings;
use Data::Dumper;


my %hash = ("key"=>["1567 I(u), 2070 I(m), 2.456e-2 V(m), 417 ---, 12 R(k),"]);
my @array =  $hash{'key'}->[0] =~ /(\S+)\s+\S+,?/g;
print Dumper \@array;
my %hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"]);

my $i;
my @array = grep { ++$i % 2 } split /,?\s/, $hash{key}->[0];

$, = "\n";
print @array;
还有另一个选择:

use strict;
use warnings;
use Data::Dumper;


my %hash = ("key"=>["1567 I(u), 2070 I(m), 2.456e-2 V(m), 417 ---, 12 R(k),"]);
my @array =  $hash{'key'}->[0] =~ /(\S+)\s+\S+,?/g;
print Dumper \@array;
my %hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"]);

my $i;
my @array = grep { ++$i % 2 } split /,?\s/, $hash{key}->[0];

$, = "\n";
print @array;
还有另一个选择:

use strict;
use warnings;
use Data::Dumper;


my %hash = ("key"=>["1567 I(u), 2070 I(m), 2.456e-2 V(m), 417 ---, 12 R(k),"]);
my @array =  $hash{'key'}->[0] =~ /(\S+)\s+\S+,?/g;
print Dumper \@array;
my %hash = ("key"=>["Value1 unit(1), Value2 unit(2), Value3 unit"]);

my $i;
my @array = grep { ++$i % 2 } split /,?\s/, $hash{key}->[0];

$, = "\n";
print @array;

您可以使用一个相对简单的正则表达式:

@array = $hash{'key'}[0] =~ m/\s*(\S+)\s+\S+,?/g;
需要知道的重要一点是,使用
/g
标志,正则表达式匹配器将返回所有捕获的(
$1
$2
,等等)组,这些组将根据字符串进行全局匹配。这个正则表达式有一个这样的组

我的假设是:

  • “Value1”、“Value2”部分只是非空白的块
  • “单元(1)”、“单元(2)”部分也只是非空白的块

  • 如果这些假设无效,您可以使用与您的数据相匹配的更具体的内容替换正则表达式的两个部分。

    您可以使用一个相对简单的正则表达式:

    @array = $hash{'key'}[0] =~ m/\s*(\S+)\s+\S+,?/g;
    
    需要知道的重要一点是,使用
    /g
    标志,正则表达式匹配器将返回所有捕获的(
    $1
    $2
    ,等等)组,这些组将根据字符串进行全局匹配。这个正则表达式有一个这样的组

    我的假设是:

  • “Value1”、“Value2”部分只是非空白的块
  • “单元(1)”、“单元(2)”部分也只是非空白的块

  • 如果这些假设无效,您可以使用与您的数据相匹配的更具体的内容替换正则表达式的两个部分。

    您可以使用一个相对简单的正则表达式:

    @array = $hash{'key'}[0] =~ m/\s*(\S+)\s+\S+,?/g;
    
    需要知道的重要一点是,使用
    /g
    标志,正则表达式匹配器将返回所有捕获的(
    $1
    $2
    ,等等)组,这些组将根据字符串进行全局匹配。这个正则表达式有一个这样的组

    我的假设是:

  • “Value1”、“Value2”部分只是非空白的块
  • “单元(1)”、“单元(2)”部分也只是非空白的块

  • 如果这些假设无效,您可以使用与您的数据相匹配的更具体的内容替换正则表达式的两个部分。

    您可以使用一个相对简单的正则表达式:

    @array = $hash{'key'}[0] =~ m/\s*(\S+)\s+\S+,?/g;
    
    需要知道的重要一点是,使用
    /g
    标志,正则表达式匹配器将返回所有捕获的(
    $1
    $2
    ,等等)组,这些组将根据字符串进行全局匹配。这个正则表达式有一个这样的组

    我的假设是:

  • “Value1”、“Value2”部分只是非空白的块
  • “单元(1)”、“单元(2)”部分也只是非空白的块


  • 如果这些假设无效,您可以将正则表达式的两个
    \S+
    部分替换为与您的数据匹配的更具体的部分。

    为什么不使用逗号分割,然后使用
    map
    从它们中删除
    单位
    后缀。问题是最后一个
    单位
    后面没有逗号,因此它与其他分隔符不同。为什么不使用逗号分隔,然后使用
    map
    从每个分隔符中删除
    unit
    后缀。问题是最后一个
    unit
    后面没有逗号,所以它与其他分隔符不同。为什么不使用逗号分隔,然后使用
    map
    从每个单元中删除
    unit
    后缀。问题是最后一个
    unit
    后面没有逗号,因此它与其他分隔符不同。为什么不使用逗号分隔,然后使用
    map
    删除每个元素的
    unit
    后缀。问题是最后一个
    unit
    后面没有逗号,因此它与其他分隔符不同。如果“unit”-s是随机的东西,比如R(ohm),V(u),那么实际键值如下所示::
    1567i(u),2070i(m),2.456e-2v(m),417--,12 R(k),
    没有添加到线程中,认为可以使用regex完成,所以您只想删除空格后的所有内容?这很简单。我只想将这些值推送到一个数组:::
    1567200,2.456e-2417,12
    我刚刚修复了一个
    split
    以将逗号后的空格作为分隔符的一部分。现在我的答案对我有用。如果“unit”-s是随机的东西,比如R(ohm),V(u),那么实际的键值看起来是这样的::
    1567i(u),2070i(m),2.456e-2v(m),417---,12r(k),
    没有添加到线程中,可以用regex完成思想,所以你只想删除空格后的所有内容?这很简单。我只想将这些值推送到一个数组:::
    1567200,2.456e-2417,12
    我刚刚修复了一个
    split
    以将逗号后的空格作为分隔符的一部分。现在我的答案对我有用。如果“unit”-s是随机的东西,比如R(ohm),V(u),那么实际的键值看起来是这样的::
    1567i(u),2070i(m),2.456e-2v(m),417---,12r(k),
    没有添加到线程中,可以用regex完成思想,所以你只想删除空格后的所有内容?这很简单。我只想将这些值推送到一个数组:::
    1567200,2.456e-2417,12
    我刚刚修复了一个
    split
    以将逗号后的空格作为分隔符的一部分。现在我的答案对我有用。如果“单位”-s是随机的东西,比如R(欧姆),V(u),那么实际的键值就是这样的::
    1567i(u),2070i(m),2.456e-2v(m),417---,1