8

私が次のような文字列を持っている場合

10,000kg crane,21

すべてのコンマを削除するにはどうすればよいですか?

10000kg crane,21

これは正規表現の問題だと思います。

4

4 に答える 4

11

これは、先読みアサーションを使用して正規表現で行うことができます。少なくとも 1 つのコンマが後にあるコンマを置き換えます。この先読みが失敗する唯一のコンマは、最後のコンマです。

これを試して:

s = Regex.Replace(s, ",(?=.*?,)", "")

オンラインでの動作を確認してください: ideone

于 2012-08-24T21:04:02.440 に答える
7

正規表現ソリューションよりもはるかに高速に実行される別のアプローチ:

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 倍高速です。

于 2012-08-24T21:14:49.020 に答える
1

正規表現を使用しないアプローチ:

Dim text = "10,000kg crane,21"
Dim parts = text.Split(","c).Reverse
Dim result = String.Join("", parts.Skip(1).Reverse) & "," & parts.First
于 2012-08-24T21:10:11.180 に答える
0

醜いが有効な代替アプローチ:

    Dim strResult As String = Replace(Mid(strTarget, 1, strTarget.LastIndexOf(",")), ",", String.Empty) & _
                              Microsoft.VisualBasic.Right(strTarget, Len(strTarget) - strTarget.LastIndexOf(","))
于 2012-08-24T21:33:51.307 に答える