私が次のような文字列を持っている場合
10,000kg crane,21
、
すべてのコンマを削除するにはどうすればよいですか?
10000kg crane,21
?
これは正規表現の問題だと思います。
これは、先読みアサーションを使用して正規表現で行うことができます。少なくとも 1 つのコンマが後にあるコンマを置き換えます。この先読みが失敗する唯一のコンマは、最後のコンマです。
これを試して:
s = Regex.Replace(s, ",(?=.*?,)", "")
オンラインでの動作を確認してください: ideone
正規表現ソリューションよりもはるかに高速に実行される別のアプローチ:
Dim s As String = "10,000kg crane,21"
Dim result As String = New StringBuilder(s).Replace(",", String.Empty, 0,
s.LastIndexOf(","c)).ToString()
要点は、「、」のすべての出現を、最初の文字と最後の「、」のインデックスの間の空の文字列に置き換えることです。
これと提案された RegEx ソリューションをそれぞれ 1,000,000 回実行して、いくつかのベンチマークを実行しました。私のラップトップでは、正規表現をコンパイルせずに、このソリューションは約 7 倍高速です。正規表現をコンパイルしても、それでも約 2 倍高速です。
正規表現を使用しないアプローチ:
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(","))