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

本文关键字:字符 用于 替换 数字 RegEx | 更新日期: 2023-09-27 18:28:12

如果我有一个带数字的数据字符串。这种模式是不一致的。我想从字符串中提取所有数字,只提取一个定义为允许的字符。我认为RegEx可能是最简单的方法。你能提供一个正则表达式模式来做到这一点吗?因为我认为正则表达式是巫毒,只有正则表达式医学专家知道它是如何工作的

eg/

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

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

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

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

这有点可怕——嵌套的lambda——所以为了清晰起见,最好使用正则表达式。

类似的东西怎么样

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