gpt4 book ai didi

arrays - 如何根据正则表达式过滤每个数组元素

转载 作者:行者123 更新时间:2023-12-02 09:30:31 25 4
gpt4 key购买 nike

我有一个包含如下元素的数组:

@ORF= (MEZQFVECQWSXC*FVCXRCT*, MAEZCRTDRX*AZEFZC*AZERC*)

我想拆分每个数组,以便每个元素以 'M' 开头并以 '*' 结尾,没有额外的 '*' > 介于两者之间。

所以我上面的例子应该给我

@ORF = (MEZQFVECQWSXC*,MAEZCRTDRX*)

我考虑过首先像这样分割每个元素:

    foreach (@ORF) {
my $true= split /\*/, $_;
push @ORF, $true
}

然后用if语句拼接其他的,但是这样不行。

我也考虑过使用 grep

@ORF= grep m/M.*\*/, @ORF;

但这并不影响数组。

我越来越困惑,谷歌也没有帮助...请帮助我?

最佳答案

您确实可以使用 split 来做到这一点和一个循环。您还可以使用 map 而不是for循环。

use strict;
use warnings;
use Data::Printer;

my @ORF= ('MEZQFVECQWSXC*FVCXRCT*', 'MAEZCRTDRX*AZEFZC*AZERC*');
@ORF = map { (split /\*/, $_, 0 )[0] . '*' } @ORF;

p @ORF;

它将迭代 @ORF 中的每个元素和split关于*0正如第三个参数所示 split只 split 一次。将返回值视为列表,仅采用第一个元素( [0] ),放回星号,您就得到了一个以 M 开头的新字符串列表。并以星号结尾。

[
[0] "MEZQFVECQWSXC*",
[1] "MAEZCRTDRX*"
]

当然,假设只有字符串与此模式匹配而不进行检查。


更简单的方法是使用 substr index 查找 * 第一次出现并取字符串的开头直到该字符。这可能更像是您想要对 splice 执行的操作,但误解了它的作用。

@ORF = map { substr $_, 0 , index($_, '*') + 1 } @ORF;

关于arrays - 如何根据正则表达式过滤每个数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33759315/

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