8

如果我有一个字符串

10,000kg crane,21,

我应该如何去除所有逗号,但最后一个得到

10000kg crane,21?

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

4

4 回答 4

11

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

试试这个:

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

在线查看它:ideone

于 2012-08-24T21:04:02.440 回答
7

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

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

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

我做了一些基准测试,分别运行了 1,000,000 次和建议的 RegEx 解决方案;在我的笔记本电脑上,无需编译 RegEx,此解决方案的速度大约快七 (7) 倍。如果你编译 RegEx,它的速度仍然是原来的两倍。

于 2012-08-24T21:14:49.020 回答
1

无正则表达式方法:

Dim text = "10,000kg crane,21"
Dim parts = text.Split(","c).Reverse
Dim result = String.Join("", parts.Skip(1).Reverse) & "," & parts.First
于 2012-08-24T21:10:11.180 回答
0

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

    Dim strResult As String = Replace(Mid(strTarget, 1, strTarget.LastIndexOf(",")), ",", String.Empty) & _
                              Microsoft.VisualBasic.Right(strTarget, Len(strTarget) - strTarget.LastIndexOf(","))
于 2012-08-24T21:33:51.307 回答