【问题标题】:How to extract integer values from inside a string [duplicate]如何从字符串中提取整数值[重复]
【发布时间】:2021-08-12 05:32:20
【问题描述】:

我运行 PowerShell 命令以使用 C# 获取总 RAM 容量,并返回此值。 @{TotalPhysicalMemory= 17856325}。我写了一个代码来获取唯一的整数值。这是代码。

string ramSize = "@{TotalPhysicalMemory= 17856325}";
string ramValue = ramSize.Split('=')[1].Split('}')[0].Trim().ToString();

此代码返回整数值。但是我想知道有什么方法可以轻松获取这个整数值吗?

【问题讨论】:

  • 使用正则表达式很容易上手。查找\d 字符类元素
  • 我尝试这样做,但我无法弄清楚如何使用它。你能解释一下吗? @Flydog57
  • PowerShell 命令的重点是它们返回objects。实际上,您尝试解析的这个字符串是具有TotalPhysicalMemory 属性的对象的表示。您应该直接请求该属性。如果您正在处理该对象的字符串渲染,那么您在此之前就失去了优势。
  • 获取一个搜索工具(Google、Bing),并搜索我的斜体字词(“正则表达式”),可能在搜索中添加\d,并使用 C# 来祝你好运。我的搜索出现了docs.microsoft.com/en-us/dotnet/standard/base-types/…,一个非常好的链接。然后在左手痛处,有一个“概述”主题的链接:docs.microsoft.com/en-us/dotnet/standard/base-types/…。在两者之间,您应该能够弄清楚。从字符串中提取数字是基本的 RegEx 示例之一。享受学习
  • 需要注意的一点是,如果您正在查看计算机的总 RAM,您可能不想使用 int。请改用long

标签: c# string split integer


【解决方案1】:

一个简单的正则表达式来提取字符串中的数字就可以了。

var ram = new Regex(@"\d+").Match(ramSize).Value;

也可以添加System.Management,直接获取大小

            var ram =
            new ManagementObjectSearcher("root\\CIMV2",
                    "SELECT TotalPhysicalMemory FROM Win32_ComputerSystem")
                .Get().OfType<ManagementObject>().First()
                .Properties.OfType<PropertyData>().First().Value;

【讨论】:

    【解决方案2】:

    要仅获取字符串中的第一个数字,您可以轻松地执行以下操作:

    using System.Text.RegularExpressions 
    string ramValue = Regex.Match(ramSize, @"\d+").Value;
    

    要获取字符串中的所有数字,您可以使用 Linq:

    using System.Linq
    string ramValue = ramSize.Where(Char.IsDigit).ToArray()
    

    也请看这里:

    Find and extract a number from a string

    【讨论】:

      【解决方案3】:

      您可以使用 Regex 来获取值。

      Regex 101

      第一个捕获组

      \d 匹配一个数字(相当于 [0-9])并且 + 匹配前一个令牌一次到无限次

      因此,match.Groups[1].Value 将从组 (\d+) 中获取值,如上所述。

      using System.Text.RegularExpression;
      
      string ramSize = "@{TotalPhysicalMemory= 17856325}";
      Regex regex = new Regex(@"^\@{TotalPhysicalMemory= (\d+)}");
      var match = regex.Match(str);
      var ramValue = match.Groups[1].Value;
      
      Console.WriteLine("Value: " + ramValue);
      

      输出

      值:17856325

      Sample program

      【讨论】:

        猜你喜欢
        • 2016-06-09
        • 1970-01-01
        • 2021-05-19
        • 2019-03-16
        • 1970-01-01
        • 2017-09-24
        • 2020-07-06
        • 2017-07-07
        相关资源
        最近更新 更多