2014-01-08 8 views
3

Если у меня есть это:Regex удалить последнюю часть

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 
Смежные вопросы