2013-09-21 133 views
0

我想要替換字符串中數字的所有實例,但前提是該數字是列中空格分隔的第n列。Perl正則表達式部分替換

這是我到目前爲止:

$_ =~ s/\s+([^\s]+\s+){$numcols}$i(.*)\n/$rep/; 

基本上,會有幾個空格,然後會出現:(非空間(列),然後空格)$數numCols倍。然後,會有$ i,其中$ i是我想要替換的數字,後面是一些我不關心的字符和一個換行符。但是,我不想用$ rep替換ALL WITH THAT,但只有$ i。我怎麼做?

+1

我認爲在空間上拆分並替換結果數組的第n個元素可能會更容易。 – Jerry

+0

問題是我必須重印它,並且事先不知道需要在每列之間添加多少個空格 – user2258552

+0

請注意,您不需要指定'$ _ =〜'。這是默認設置。這就是爲什麼'$ _'存在的原因。 '$ _'是「it」變量。只要執行/.../..../'。 –

回答

2

事情是這樣的:

$_ =~ s/^(\s+(?:[^\s]+\s+){$numcols})$i/$1$rep/; 

我們在捕捉一切$i爲一組(由?:在它的中間表示的非捕獲組)前。我們正在保留所有這些,僅替換$i,並將剩餘的字符串單獨留下。

+0

非常好,謝謝。但是,我意識到我確實在做錯事。我需要通過$ i的numcols替換第0列中的EVERY實例,並使用rep,而在我剛剛替換numcolsth實例之前。此外,只是想知道,爲什麼這個工作,因爲?:不捕捉組不會採取行動的第一個\ +? – user2258552