我想要替换字符串中数字的所有实例,但前提是该数字是列中空格分隔的第n列。Perl正则表达式部分替换
这是我到目前为止:
$_ =~ s/\s+([^\s]+\s+){$numcols}$i(.*)\n/$rep/;
基本上,会有几个空格,然后会出现:(非空间(列),然后空格)$数numCols倍。然后,会有$ i,其中$ i是我想要替换的数字,后面是一些我不关心的字符和一个换行符。但是,我不想用$ rep替换ALL WITH THAT,但只有$ i。我怎么做?
我想要替换字符串中数字的所有实例,但前提是该数字是列中空格分隔的第n列。Perl正则表达式部分替换
这是我到目前为止:
$_ =~ s/\s+([^\s]+\s+){$numcols}$i(.*)\n/$rep/;
基本上,会有几个空格,然后会出现:(非空间(列),然后空格)$数numCols倍。然后,会有$ i,其中$ i是我想要替换的数字,后面是一些我不关心的字符和一个换行符。但是,我不想用$ rep替换ALL WITH THAT,但只有$ i。我怎么做?
事情是这样的:
$_ =~ s/^(\s+(?:[^\s]+\s+){$numcols})$i/$1$rep/;
我们在捕捉一切$i
为一组(由?:
在它的中间表示的非捕获组)前。我们正在保留所有这些,仅替换$i
,并将剩余的字符串单独留下。
非常好,谢谢。但是,我意识到我确实在做错事。我需要通过$ i的numcols替换第0列中的EVERY实例,并使用rep,而在我刚刚替换numcolsth实例之前。此外,只是想知道,为什么这个工作,因为?:不捕捉组不会采取行动的第一个\ +? – user2258552
我认为在空间上拆分并替换结果数组的第n个元素可能会更容易。 – Jerry
问题是我必须重印它,并且事先不知道需要在每列之间添加多少个空格 – user2258552
请注意,您不需要指定'$ _ =〜'。这是默认设置。这就是为什么'$ _'存在的原因。 '$ _'是“it”变量。只要执行/.../..../'。 –