RegEx用于替换除数字之外的所有字符

如果我有一个包含数字的数据字符串。 这种模式不一致。 我想从字符串中提取所有数字,只提取一个被定义为允许的字符。 我认为RegEx可能是最简单的方法。 你可以提供一个可以做到这一点的正则表达模式,因为我认为正则表达式是伏都教而只有正则表达式的医学人知道它是如何工作的

例如/

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

更新 :这是我的代码:

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

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

使用Regex.Replace(string,string,string)静态方法。

样品

要允许N您可以将模式更改为[^\dN] 。 如果您正在寻找n ,您可以应用RegexOptions.IgnoreCase或将类更改为[^\dnN]

不需要使用正则表达式! 只需查看字符并询问每个字符是否为数字。

 s.Where(Char.IsDigit) 

或者如果你需要它作为一个字符串

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

编辑显然你还需要'N'

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

编辑编辑示例:

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

这有点可怕 – 嵌套的lambdas – 所以你可能最好使用正则表达式来清晰。

怎么样的东西

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