@ Ajay_C: あなたの問題が実際にコメントで述べたとおりである場合:
文字列の先頭に「0」がない場合、数値の前に「1」を追加する必要があったため、if ステートメントが必要でした。
次に、次のようなものが必要です。
class Program
{
static string TransformUserInput( string s )
{
if ( s == null ) throw new ArgumentNullException("s") ;
string transformed = "" ;
if ( s.Length > 0 )
{
transformed = rxLeadingZeros.Replace(s, m => m.Length == 0 ? "1" : m.Length == s.Length ? "0" : "" ) ;
}
return transformed ;
}
private static readonly Regex rxLeadingZeros = new Regex( @"^0*");
static void Main( string[] args )
{
string [] values = { "" , "0" , "000" , "000000987654321000" , "54321000" , "0000000000000000000000000000000" , "000000000000000000009876543210" , } ;
foreach ( string raw in values )
{
string cooked = TransformUserInput(raw) ;
Console.WriteLine( "raw : {0}",raw) ;
Console.WriteLine( "cooked : {0}",cooked);
Console.WriteLine() ;
}
return;
}
}
これは次のことを行います:
- すべての先頭のゼロ
0
文字に一致します (ゼロの場合もあります)
- 文字列が空の場合、空の文字列を返します。
- それ以外の場合は、変換して作成された文字列を返します。
- 一致の長さがゼロの場合 (先頭にゼロがないことを意味します)、a
1
が文字列の先頭に追加されます。
- それ以外の場合、一致の長さがソース文字列全体の長さである場合 (ソース文字列がすべてゼロであることを意味する)、単一の値
0
が返されます。
- それ以外の場合 (ソース文字列全体ではなく、1 つ以上の先行ゼロが一致した場合)、先行ゼロを空 (nil) 文字列に置き換えます
String.Empty
。
出力は次のとおりです。
raw :
cooked :
raw : 0
cooked : 0
raw : 000
cooked : 0
raw : 000000987654321000
cooked : 987654321000
raw : 54321000
cooked : 154321000
raw : 0000000000000000000000000000000
cooked : 0
raw : 000000000000000000009876543210
cooked : 9876543210