2

+1 (123) 123-1234 のような電話を持っている簡単な問題があります。正規表現を使用してその文字列から数字を取り出したいだけです。

4

4 に答える 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 に答える