加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 如何在Perl中迭代正则表达式匹配变量?

发布时间:2020-12-14 06:00:40 所属栏目:百科 来源:网络整理
导读:我有一个很长的正则表达式,可以将文本文件解析为各种匹配变量. 对于稳健性,匹配变量可能包含空格.我想通过迭代匹配变量以系统的方式删除空格. 例如,我有匹配变量$2到$14,包含一些空格. 我可以: my @columns = my ($serNum,$helixID,$initResName,$initChain
我有一个很长的正则表达式,可以将文本文件解析为各种匹配变量.

对于稳健性,匹配变量可能包含空格.我想通过迭代匹配变量以系统的方式删除空格.

例如,我有匹配变量$2到$14,包含一些空格.

我可以:

my @columns = my ($serNum,$helixID,$initResName,$initChainID,$initSeqNum,$initIcode,$endResName,$endChainID,$endSeqNum,$endICode,$helixClass,$comment,$length) = 
($2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14);

### Remove whitespace                       
foreach my $element (0..$#columns) {
    $columns[$element] =~ s/^s+//;
    $columns[$element] =~ s/s+$//;
}

但这只会删除@column中元素中的空格,并保留正确命名的标量,$serNum,$helixID等.

有没有办法在将每个匹配变量复制到更好命名的标量之前删除每个匹配变量中的空白区域,或者有没有办法迭代这些命名良好的标量本身并从那里删除空格?

我认为可能有一些方法可以用引用来做到这一点.

解决方法

您可以先将匹配变量存储在数组中,然后使用map删除空格:

my @matches = ($2,...);

my ($serNum,...) 
  = map { (my $v = $_) =~ s/^s+|s+$//g; $v } @matches;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读