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

Tha*_*ess 5 regex vb.net

如果我有一个字符串

10,000kg crane,21,

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

10000kg crane,21

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

Mar*_*ers 9

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

试试这个:

s = Regex.Replace(s, ",(?=.*?,)", "")
Run Code Online (Sandbox Code Playgroud)

看到它在线工作:ideone


Cᴏʀ*_*ᴏʀʏ 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()
Run Code Online (Sandbox Code Playgroud)

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

我做了一些运行此基准测试的基准测试,建议的RegEx解决方案各占100,000次; 在我的笔记本电脑上,没有编译RegEx,这个解决方案快了大约七(7)倍.如果你编译RegEx,它的速度仍然快两倍.