替换指定字符的最后一个实例

时间:2012-08-24 21:00:14

标签: regex vb.net

如果我有像

这样的字符串

10,000kg crane,21

我应该如何删除所有逗号,但最后要删除

10000kg crane,21

我认为这是一个正则表达式问题。

4 个答案:

答案 0 :(得分:8)

可以使用lookahead assertion通过正则表达式完成。您想要替换后面至少有一个逗号的逗号。这个前瞻失败的唯一逗号是最后一个。

试试这个:

s = Regex.Replace(s, ",(?=.*?,)", "")

查看在线工作:ideone

答案 1 :(得分:5)

另一种方法,其执行速度可能比RegEx解决方案快得多:

Dim s As String = "10,000kg crane,21"
Dim result As String = New StringBuilder(s).Replace(",", String.Empty, 0,
    s.LastIndexOf(","c)).ToString()

要点是它将用第一个字符和最后一个“,”的索引之间的空字符串替换所有出现的“,”。

我做了一些基准测试,每次测试the proposed RegEx solution 1,000,000次;在我的笔记本电脑上,没有编译RegEx,这个解决方案快了大约七(7)倍。如果您确实编译了RegEx,它的速度仍然快两倍。

答案 2 :(得分:1)

无正则表达式方法:

Dim text = "10,000kg crane,21"
Dim parts = text.Split(","c).Reverse
Dim result = String.Join("", parts.Skip(1).Reverse) & "," & parts.First

答案 3 :(得分:0)

一种更丑陋而又有效的替代方法:

    Dim strResult As String = Replace(Mid(strTarget, 1, strTarget.LastIndexOf(",")), ",", String.Empty) & _
                              Microsoft.VisualBasic.Right(strTarget, Len(strTarget) - strTarget.LastIndexOf(","))