【发布时间】:2012-08-24 21:00:14
【问题描述】:
如果我有一个类似的字符串
10,000kg crane,21,
我应该如何去掉除最后一个逗号以外的所有逗号
10000kg crane,21?
我认为这是一个正则表达式问题。
【问题讨论】:
-
所以您希望输出为 10000kg 起重机,21?
如果我有一个类似的字符串
10,000kg crane,21,
我应该如何去掉除最后一个逗号以外的所有逗号
10000kg crane,21?
我认为这是一个正则表达式问题。
【问题讨论】:
可以通过使用lookahead assertion 使用正则表达式来完成。您想替换后面至少有一个逗号的逗号。唯一会失败的逗号是最后一个逗号。
试试这个:
s = Regex.Replace(s, ",(?=.*?,)", "")
在线查看:ideone
【讨论】:
(?s),以防字符串包含换行符。
另一种方法,它的执行速度可能比 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,它的速度仍然是原来的两倍。
【讨论】:
无正则表达式方法:
Dim text = "10,000kg crane,21"
Dim parts = text.Split(","c).Reverse
Dim result = String.Join("", parts.Skip(1).Reverse) & "," & parts.First
【讨论】:
一种更丑陋但有效的替代方法:
Dim strResult As String = Replace(Mid(strTarget, 1, strTarget.LastIndexOf(",")), ",", String.Empty) & _
Microsoft.VisualBasic.Right(strTarget, Len(strTarget) - strTarget.LastIndexOf(","))
【讨论】: