Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 替换指定字符的所有实例,但最后一个实例除外_Regex_Vb.net - Fatal编程技术网

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)
。谢谢-这更易于维护。