+1 (123) 123-1234 のような電話を持っている簡単な問題があります。正規表現を使用してその文字列から数字を取り出したいだけです。
4 に答える
13
これにより、数字以外の文字が削除されます。
string input = "+1 (123) 123-1234";
string digits = Regex.Replace(input,@"\D",string.Empty);
于 2009-04-21T22:10:03.117 に答える
6
RegEx の使用は 1 つのソリューションです。 別の方法は、LINQ を使用することです (.Net 3.5 を使用している場合)。
string myPhone = "+1 (123) 123-1234";
string StrippedPhone = new string((from c in myPhone
where Char.IsDigit(c)
select c).ToArray());
最終結果は同じですが、この場合、LINQ には RegEx よりもいくつかの利点があると思います。まず、読みやすさ。RegEx では、「D」が非数字を意味することを知っておく必要があります (Char.IsDigit() と比較して)-ここのコメントには既に混乱があります。また、各メソッドを 100,000 回実行する、非常に単純なベンチマークも行いました。
リンク: 127ms
正規表現: 485ms
したがって、一見すると、LINQ はこの状況で正規表現を実行しているように見えます。そして、私はそれがより読みやすいと主張します。
int i;
int TIMES = 100000;
Stopwatch sw = new Stopwatch();
string myPhone = "+1 (123) 123-1234";
// Using LINQ
sw.Start();
for (i = 0; i < TIMES; i++)
{
string StrippedPhone = new string((from c in myPhone
where Char.IsDigit(c)
select c).ToArray());
}
sw.Stop();
Console.WriteLine("Linq took {0}ms", sw.ElapsedMilliseconds);
// Reset
sw.Reset();
// Using RegEx
sw.Start();
for (i = 0; i < TIMES; i++)
{
string digits = Regex.Replace(myPhone, @"\D", string.Empty);
}
sw.Stop();
Console.WriteLine("RegEx took {0}ms", sw.ElapsedMilliseconds);
Console.ReadLine();
于 2009-04-21T22:54:02.073 に答える
2
string digits = Regex.Replace(input, @"[^\d]", String.Empty);
于 2009-04-21T22:12:35.373 に答える
-2
なぜ交換しないのですか?
string phoneNumber = "+1 (123) 123-1234";
phoneNumber = phoneNumber.Replace("+", "");
phoneNumber = phoneNumber.Replace("(", "");
phoneNumber = phoneNumber.Replace(")", "");
phoneNumber = phoneNumber.Replace("-", "");
phoneNumber = phoneNumber.Replace(" ", "");
于 2009-04-21T22:11:33.800 に答える