RegEx для замены всех символов, кроме цифр

Если у меня есть строка данных с числами в ней. Этот шаблон несовместим. Я хотел бы извлечь все числа из строки и только символ, который определен как разрешенный. Я думал, что RegEx может быть самым простым способом сделать это. Не могли бы вы предоставить регулярное выражение, которое может сделать это, поскольку я думаю, что регулярное выражение является вуду, и только люди с регулярным выражением знают, как это работает.

eg/

"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();

Ответ 1

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

Используя Regex.Replace(string,string,string) статический метод.

Пример

Чтобы разрешить N, вы можете изменить шаблон на [^\dN]. Если вы ищете N, вы можете либо применить RegexOptions.IgnoreCase, либо изменить класс на [^\dnN]

Ответ 2

Не нужно использовать регулярные выражения! Просто просмотрите персонажей и спросите каждого из них, являются ли они цифрами.

s.Where(Char.IsDigit)

Или если вам это нужно как строка

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

EDIT Очевидно, вам также понадобится '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();

Этот вид ужасно-вложенных лямбда - так что вам может быть лучше использовать регулярное выражение для ясности.

Ответ 3

Как насчет чего-то в строках

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