我想要替換字符串中數字的所有實例,但前提是該數字是列中空格分隔的第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」變量。只要執行/.../..../'。 –