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]; }
}