说我有一个包含数字和其他字符的字符串。
我想将字符串仅减少为数字。
F.e。从23232-2222-d23231到23232222223231
可以用string.replace()完成吗?
如果没有,最简单最短的方式是什么?
10倍!
答案 0 :(得分:15)
有许多可能性,从正则表达式到自己处理文本。我会这样做:
Regex.Replace(input, @"\D+", "")
答案 1 :(得分:4)
那么,你将通过String.Replace和Regex.Replace获得大约874355876234857的答案,所以这是一个LINQ解决方案:
code = new String((from c in code where Char.IsDigit(c) select c).ToArray());
或使用扩展方法:
code = new String(code.Where(c => Char.IsDigit(c)).ToArray());
答案 2 :(得分:2)
是的,您可以使用String.replace,但使用正则表达式会更明智,这样您就可以轻松地匹配更多标准。
答案 3 :(得分:2)
最好的方法是使用正则表达式。你的例子是:
RegEx.Replace("23232-2222-d23231", "\\D+", "");
答案 4 :(得分:1)
采样的正则表达式是最简单和最短的。
我想知道下面会更快吗?
string sample = "23232-2222-d23231";
StringBuilder resultBuilder = new StringBuilder(sample.Length);
char c;
for (int i = 0; i < sample.Length; i++)
{
c = sample[i];
if (c >= '0' && c <= '9')
{
resultBuilder.Append(c);
}
}
Console.WriteLine(resultBuilder.ToString());
Console.ReadLine();
猜测它取决于一些事情,包括字符串长度。
答案 5 :(得分:0)
最简单的方法是使用替换。
string test = "23232-2222-d23231";
string newString = test.Replace("-","").Replace("d","");
但使用REGEX会更好,但更难。
答案 6 :(得分:0)
string.Replace()
不能(轻松)实现。最简单的解决方案是以下函数/代码:
public string GetDigits(string input)
{
Regex r = new Regex("[^0-9]+");
return r.Replace(input, "");
}
答案 7 :(得分:0)
我会使用正则表达式。
请参阅此帖子Regex for numbers only
答案 8 :(得分:0)
您可以使用简单的扩展方法:
public static string OnlyDigits(this string s)
{
if (s == null)
throw new ArgumentNullException("null string");
StringBuilder sb = new StringBuilder(s.Length);
foreach (var c in s)
{
if (char.IsDigit(c))
sb.Append(c);
}
return sb.ToString();
}
答案 9 :(得分:0)
尝试
string str="23232-2222-d23231";
str=Regex.Replace(str, @"\D+", String.Empty);
答案 10 :(得分:0)
您可以使用LINQ:
string allDigits = new String(input.Where(c => Char.IsDigit(c)).ToArray());
答案 11 :(得分:-1)
您可以使用正则表达式。
string str = "sdfsdf99393sdfsd";
str = Regex.Replace(str, @"[a-zA-Z _\-]", "");
我之前使用它只返回字符串中的数字。