如何在C#中仅获取整数并删除所有字符串

16

如何去除字符串,只保留整数?

我有一个字符串(01 - ABCDEFG)

我需要仅获取(01)

10个回答

37
input = Regex.Replace(input, "[^0-9]+", string.Empty);

12

有四种不同的方法可以做到这一点(也许还有更多,但我选择了这些)。

#1:Bala R的正则表达式

string output = Regex.Replace(input, "[^0-9]+", string.Empty);

#2:来自Donut和agent-j的正则表达式

string output = Regex.Match(input, @"\d+").Value;

#3: Linq

string output = new string(input.ToCharArray().Where(c => char.IsDigit(c)).ToArray());

#4: 子字符串,为了使其起作用,破折号必须位于数字和文本之间。

string output = input.Substring(0, input.IndexOf("-")).Replace(" ", "");

使用这些输入:

string input1 = "01 - ABCDEFG";
string input2 = "01 - ABCDEFG123";

对于1和2,结果如下:

output1 = "01";
output2 = "01123";

对于3和4,结果将是:

output1 = "01";
output2 = "01";

如果期望结果是获取字符串中的所有数字,请使用#1或#2,但如果期望结果仅是获取破折号前面的数字,请使用#3或#4。

对于像这样短的字符串,#1和#2的速度大致相同,#3和#4也是如此,但如果有大量迭代或字符串长度增加到四倍以上,则#2比#1更快,而#4比#3更快。

注意: 如果字符串中包括括号,则必须将#4修改为以下内容,但这不会使其变慢:

string output = input.Substring(0, input.IndexOf("-")).Replace(" ", "").Replace("(", "");

4

尝试这个:

Convert.ToInt32(string.Join(null, System.Text.RegularExpressions.Regex.Split(s, "[^\\d]")))

它返回整数值1。


1

你应该使用正则表达式--它们是一种非常强大的方式,可以将文本字符串与特定模式匹配,这是一个很好的使用场景。

模式 "\d+" 将匹配 1 个或多个数字的序列。使用此模式从字符串中提取所有数字的简单方法如下:

public static List<int> ExtractInts(string input)
{
   return Regex.Matches(input, @"\d+")
      .Cast<Match>()
      .Select(x => Convert.ToInt32(x.Value))
      .ToList();
}

你可以像这样使用它:

List<int> result = ExtractInts("( 01 - ABCDEFG )");

如果需要更详细的正则表达式信息,请参阅此页面(MSDN)此页面(有用的“备忘单”)


1

看看这篇博客文章: http://weblogs.asp.net/sushilasb/archive/2006/08/03/How-to-extract-numbers-from-string.aspx

一个使用正则表达式从字符串中提取数字的简单程序。

class Program
    {
    static void Main(string[] args)
    {
      Console.WriteLine(ExtractNumbers("( 01 - ABCDEFG )"));    // 01
      Console.ReadLine();
    }

    static string ExtractNumbers(string expr)
    {
        return string.Join(null, System.Text.RegularExpressions.Regex.Split(expr, "[^\\d]"));
    }
}

希望这能帮到你!


1
string snum = System.Text.RegularExpression.Regex.Match(s, "\d+").Value;
int num;
if (!int.TryParse(snum, out num))
  throw new Exception();

1
从字符串中获取所有数字
string str = "01567438absdg34590";
            string result = "";

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

            Console.WriteLine(result);
            Console.Read();

输出:0156743834590


0
Response.Write(Convert.ToDecimal(string.Join(null, System.Text.RegularExpressions.Regex.Split(TextBox1.Text, "[^\\d .]"))));

这适用于整数(int)和小数(decimal)。


0

你也可以使用这种方式来获得你需要的答案。

string sentence = "10 cats, 20 dogs, 40 fish and 1 programmer";
 string[] digits= Regex.Split(sentence, @"\D+");
             foreach (string value in digits)
             {
                 int number;
                 if (int.TryParse(value, out number))
                 {
                     Debug.Log(value);
                 }
             }

0

试试这个:

string XYZ = string.Join(null, System.Text.RegularExpressions.Regex.Split(“XYZ  77”, “[^\d]”));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接