2012-05-22 5 views
2

я могу иметь эти возможные строки слизнякаЗамена последних символов с характером

my-post 
my-post-2 
my-post-2-3 
my-post-2-3-4-5-6-7-8-9 

this-is-my-post 
this-is-my-post-2 
this-is-my-post-2-3 
this-is-my-post-2-3-4-5-6-7 

abc-abc-abc1 
abc-abc-abc1-2  
abc-abc-abc1-2-3-4-5-6 

Они могут быть все что угодно с номером или без номеров в конце.

То, что я хочу сделать, например, взять:

this-is-my-post-2-3 

-2-3 Затем замените на конце =2=3. Таким образом, становится:

this-is-my-post=2=3 

Так есть чистый способ я могу сделать это в LINQ или некоторой строки разборе или что-то другое?

ответ

9

Вы можете использовать регулярные выражения, чтобы выяснить конец строки, а затем сделать нормальные замены символов:

теста
Regex.Replace(slug, @"[\d-]+$", m => m.Value.Replace('-', '=')); 

Быстрого PowerShell:

PS> $strings | %{ [Regex]::Replace($_, '[\d-]+$', {$args[0].value.replace('-','=')}) } 
my-post 
my-post=2 
my-post=2=3 
my-post=2=3=4=5=6=7=8=9 
this-is-my-post 
this-is-my-post=2 
this-is-my-post=2=3 
this-is-my-post=2=3=4=5=6=7 
abc-abc-abc 
abc-abc-abc=2 
abc-abc-abc=2=3=4=5=6 
this-is-my-2nd-post 
+0

, если есть строка, как это-это-мой-post1 – maztt

+0

Тем не менее, также изменится 'это-это-мое-второе-Post' в' это-это-мой = второй-Post'. – Guffa

+1

Тогда он ничего не заменит. Если у вас есть проблемы с краем, чтобы беспокоиться о *, сначала укажите их в своем вопросе *. Мы, которые отвечают, имеют только то, что вы нам даете. Мы не можем читать мысли или быть иначе экстрасенсом. – Joey

3

Вы можете использовать обычный чтобы изолировать цифры в конце и заменить черты в нем:

Regex.Replace(s, @"(-\d+)+$", m => m.Value.Replace('-', '=')) 

Пример:

this-is-my-2nd-post  -> this-is-my-2nd-post 
this-is-my-2nd-post-1  -> this-is-my-2nd-post=1 
this-is-my-2nd-post-4-5-6 -> this-is-my-2nd-post=4=5=6 
Смежные вопросы