2014-01-08 76 views
3

如果我有這樣的:正則表達式除去最後一部分

2.2.3.140113 

,並做到這一點:

$([System.Text.RegularExpressions.Regex]::Replace($(str), '^(\d+)\.(.+)$', '$1_$2'))"> 

我會得到這樣的:

2_2.3.140113 

我要的是,它應該是

2_2.3 

如何刪除最後一部分?

+0

你有更多的樣本串? – Jerry

回答

1

試着用以下的正則表達式:

^(\d+)\.(.+)(\.\d+)$ 

它將創建第三組,你會忽略,所以:

$([System.Text.RegularExpressions.Regex]::Replace($(str), '^(\d+)\.(.+)(\.\d+)$', '$1_$2'))"> 
2

改變你的正則表達式:

^(\d+)\.(.+)\.\d+$ 
+0

@downvoter:謹慎解釋? – Toto

1

所以你不應該捕獲其他人:

$([System.Text.RegularExpressions.Regex]::Replace($(str), '^(\d+)\.(.+?\..+?)\..*', '$1_$2'))"> 

更新時間:

有沒有必要使用$爲您正則表達式包括在末端的所有字符

Demo

+1

你測試過了嗎? – Jerry

+1

它似乎沒有測試正則表達式部分。有[根本沒有匹配](http://regex101.com/r/gP5jN6)! – Jerry

+1

^(\ d +)\。(。+?\ .. +?)\。變爲2_2.3121221 – user1540911

1

您可以使用此代碼:

$([System.Text.RegularExpressions.Regex]::Replace($(str), '^(\d+)\.(\d+)\.(\d+)\.(\d+)$', '$1_$2.$3'))"> 
0

不當然,如果這是你想要做的,但是如果你想在最後一個數字之前做所有的數字,你可以這樣做:

(\d+)(?=\.) 

enter image description here

這將捕獲的後面加一個點所有的組數(。)

1

嗯,這樣的事情不會做呢?

^(\d+)\.(\d+\.\d+).* 

替換爲:

$1_$2