如果我有一个包含数字的数据字符串。这种模式不一致。我想从字符串中提取所有数字,只提取一个被定义为允许的字符。我认为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();
答案 0 :(得分:13)
String numbersOnly = Regex.Replace(str, @"[^\d]", String.Empty);
使用Regex.Replace(string,string,string)
静态方法。
要允许N
,您可以将模式更改为[^\dN]
。如果您正在寻找n
,也可以申请RegexOptions.IgnoreCase
或将课程更改为[^\dnN]
答案 1 :(得分:3)
无需使用正则表达式!只需查看字符并询问每个字符是否为数字。
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 - 所以为了清晰起见你可能最好使用正则表达式。
答案 2 :(得分:1)
的内容如何
String s = "";
for ( int i = 0; i < myString.length; ){
if ( Char.IsDigit( myString, i ) ){ s += myString.Chars[i]; }
}