2012-03-19 9 views
10

数字の入った文字列がある場合。このパターンは一貫していません。私は、文字列からすべての数字を抽出し、許可された文字だけを抽出したいと思います。私はRegExがこれを行う最も簡単な方法かもしれないと思った。私は正規表現がブードゥー教だと思うようあなたはこれを行うことが正規表現パターを提供し、唯一の正規表現医学男性は、それが数字以外のすべての文字を置換するRegEx

例えば/

"Q1W2EE3R45T" = "12345" 
"WWED456J" = "456" 
"ABC123" = "123" 
"N123" = "N123" //N is an allowed character 

UPDATEどのように動作するかを知ることができ:ここに私のコードは次のとおりです。

var data = Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
data = data.Select(x => Regex.Replace(x, "??????", String.Empty)).ToArray(); 
+0

の線に沿って何かについては、文字列が非常に長いです? forはオプションではありませんか? – gbianchi

+0

ダウン投票なぜ? – Jon

+0

'' regexはブードゥーであり、正規表現の医者の男性はそれがどのように動作するか知っています。違います!一度それについて慎重に考えると、多くの意味があります。 – katrielalex

答えて

12
String numbersOnly = Regex.Replace(str, @"[^\d]", String.Empty); 

使用方法Regex.Replace(string,string,string)静的メソッド。

Sample

あなたは[^\dN]にパターンを変更することができますNできるようにします。 nをお探しの場合は、RegexOptions.IgnoreCaseを適用するか、クラスを[^\dnN]に変更する

+0

おっと!ちょうど私が 'N'文字を許可する必要があることを実現しました – Jon

+1

私はその[^ \ dN] – Jon

+0

@Jonと思う: 'N'のために私の答えを更新しました。 –

3

正規表現を使用する必要はありません!文字を見て、数字であるかどうかそれぞれに尋ねてください。あなたは文字列として

new String(s.Where(Char.IsDigit).ToArray()) 

EDITを、それを必要とする場合

s.Where(Char.IsDigit) 

それともどうやらあなたも'N'必要があります。

new String(s.Where(c => Char.IsDigit(c) || c == 'N').ToArray()) 

EDIT EDIT例:

var data = Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
data = data.Select(s => 
    new String(s.Where(c => Char.IsDigit || c == 'N').ToArray()) 
).ToArray(); 

これはちょっとひどい - 入れ子になったラムダなので、正規表現を分かりやすくする方が良いかもしれません。

+0

IsDigitは文字列内の文字のみをチェックするため、私のLINQを使って答えを表示できますか? – Jon

+0

@Jon何?私はあなたの文を理解していません。 – katrielalex

+0

あなたの答えがそれに収まる方法を示すために私の質問のコードを使用できますか? – Jon

1

どう

String s = ""; 
for (int i = 0; i < myString.length;){ 
    if (Char.IsDigit(myString, i)){ s += myString.Chars[i]; } 
} 
+0

ユーザーが投稿を編集しました.. Nも必要です... – gbianchi

関連する問題