문자

2012-05-22 4 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

이 문자열이있는 경우, 또한 변경됩니다'이 -입니다 - 내-2-post''이 -입니다 - 내 = 2-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