Regex 替换指定字符的所有实例,但最后一个实例除外
如果我有一根像Regex 替换指定字符的所有实例,但最后一个实例除外,regex,vb.net,Regex,Vb.net,如果我有一根像 10000kg起重机,21 除了最后一个逗号外,我应该如何去掉所有逗号 10000kg起重机,21 我认为这是一个正则表达式问题。可以通过使用正则表达式来完成。要替换后面至少有一个逗号的逗号。此前瞻操作将失败的唯一逗号是最后一个逗号 试试这个: s = Regex.Replace(s, ",(?=.*?,)", "") 在线查看:无正则表达式方法: Dim text = "10,000kg crane,21" Dim parts = text.Split(","c).Rever
10000kg起重机,21
除了最后一个逗号外,我应该如何去掉所有逗号
10000kg起重机,21
我认为这是一个正则表达式问题。可以通过使用正则表达式来完成。要替换后面至少有一个逗号的逗号。此前瞻操作将失败的唯一逗号是最后一个逗号 试试这个:
s = Regex.Replace(s, ",(?=.*?,)", "")
在线查看:无正则表达式方法:
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(","))
另一种执行速度可能比正则表达式解决方案快得多的方法:
Dim s As String = "10,000kg crane,21"
Dim result As String = New StringBuilder(s).Replace(",", String.Empty, 0,
s.LastIndexOf(","c)).ToString()
要点是,它将用第一个字符和最后一个“,”的索引之间的空字符串替换所有出现的“,”
我做了一些基准测试,每次运行1000000次;在我的笔记本电脑上,不编译正则表达式,这个解决方案的速度大约快七(7)倍。如果编译正则表达式,速度仍然是原来的两倍左右。一种更丑陋但有效的替代方法:
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(","))
因此,您希望输出为10000kg crane,21?+1,但如果字符串包含换行符,您可能希望在开头添加一个
(?s)
。谢谢-这更易于维护。