28

これを行うよりも、「(123) 455-2344」などの文字列を取得して「1234552344」を取得するより良い方法はありますか?

var matches = Regex.Matches(input, @"[0-9]+", RegexOptions.Compiled);

return String.Join(string.Empty, matches.Cast<Match>()
                                .Select(x => x.Value).ToArray());

おそらく、単一の一致でそれを実行できる正規表現パターンですか? しかし、それを達成するために作成することはできなかったようです。

4

5 に答える 5

85

正規表現を使用する必要がありますか?

return new String(input.Where(Char.IsDigit).ToArray());
于 2010-04-14T03:45:44.577 に答える
23

に反対するものはありReplaceますか?

return Regex.Replace(input, @"[^0-9]+", "");
于 2010-04-14T03:49:54.723 に答える
10

/\D/(数字以外) を''(空の文字列)に置き換える必要があります。

Regex r = new Regex(@"\D");
string s = Regex.Replace("(123) 455-2344", r, "");

またはより簡潔に:

string s = Regex.Replace("(123) 455-2344", @"\D",""); //return only numbers from string
于 2010-04-14T03:48:52.747 に答える
6

数字以外をすべて削除するだけです:

var result = Regex.Replace(input, @"\D", "");
于 2010-04-14T05:45:02.490 に答える
0

perl (これを C# に適応させることができます) では、単純に次のようにします。

$str =~ s/[^0-9]//g; 

あなたの文字列が $str にあると仮定しています。基本的な考え方は、すべての非数字を '' (つまり、空の文字列) に置き換えることです。

于 2010-04-14T06:27:01.923 に答える