替换除最后一个指定字符以外的所有实例

8

如果我有一个字符串如下所示:

10,000kg crane,21

如何去除除了最后一个逗号外的所有逗号
10000kg crane,21

我觉得这是一个正则表达式的问题。

所以你想要输出为10000公斤的起重机,21? - sQVe
4个回答

11

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

尝试这个:

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

在线演示效果请查看:ideone


+1,尽管您可能希望在开头添加(?s)以防字符串包含换行符。 - Tim Pietzcker

7

另一种方法,可能比正则表达式解决方案更快:

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

要点是它将在第一个字符和最后一个“,”的索引之间用空字符串替换所有出现的“,”。
我进行了一些基准测试,每个运行了这个解决方案和建议的正则表达式解决方案各100万次; 在我的笔记本电脑上,没有编译正则表达式,这个解决方案大约快了七(7)倍。如果你编译正则表达式,仍然快了两倍。

谢谢 - 这样更容易维护。 - Thalecress

1

一种非正则表达式的方法:

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

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接