用字符替换最后一个字符

时间:2012-05-22 11:10:57

标签: c# .net string linq

我可以拥有这些可能的slug字符串

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或者通过一些字符串解析或其他方式来做到这一点?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
相关问题