2

式の数値部分から先行ゼロを削除する必要があります (.net 2.0 C# Regex クラスを使用)。

元:

PAR0000034 -> PAR34

WP0003204 -> WP3204

私は次のことを試しました:

//keep starting characters, get rid of leading zeroes, keep remaining digits
string result = Regex.Replace(inputStr, "^(.+)(0+)(/d*)", "$1$3", RegexOptions.IgnoreCase)

明らかに、うまくいきませんでした。間違いを見つけるのに少し助けが必要です。

4

4 に答える 4

3

あなたの表現では、その.*部分は貪欲であるため、完全な文字列をキャッチします。さらに、数字にはスラッシュの代わりにバックスラッシュを使用します\d

string result = Regex.Replace(inputStr, @"^([^0]+)(0+)(\d*)", "$1$3");

または、代わりに後ろ向きを使用します。

string result = Regex.Replace(inputStr, "(?<=[a-zA-Z])0+", "");
于 2012-10-15T18:07:36.260 に答える
3

そのための正規表現は必要ありませんSplit。メソッドがそれを行うことができます。

で分割し'0'、空のエントリ (つまり、複数のゼロの間) を削除し、結果を 2 つの文字列に制限すると、先頭のゼロの前後に 2 つの文字列が得られます。次に、これらの 2 つの文字列を再び組み合わせます。

string result = String.Concat(
  input.Split(new char[] { '0' }, 2, StringSplitOptions.RemoveEmptyEntries)
);
于 2012-10-15T18:12:46.297 に答える
0

あなたが話しているゼロは実際には文字列の先頭にあるわけではないため、「先頭のゼロ」というフレーズは紛らわしいです。しかし、私があなたを正しく理解しているなら、あなたはこれを望んでいます:

string result = Regex.Replace(inputStr, "^(.*?)0+", "$1");

正規表現の有無にかかわらず、実際にはいくつかの方法がありますが、おそらく上記が最も短く、理解しやすい方法です。重要な部分は、.*?遅延量指定子です。これにより、a) ゼロの最初の文字列のみが検出され、b) 文字列内のすべての「先頭の」ゼロが削除されます。

于 2012-10-15T18:21:49.730 に答える
0

これは私のために働く:

Regex.Replace("PPP00001001", "([^0]*)0+(.*)", "$1$2");
于 2012-10-15T18:11:50.760 に答える