C# 从字符串c中提取数字
我有字符串: 湿度:33% 温度:25.7摄氏度 可见光:112勒克斯 红外辐射:1802.5 mW/m2 紫外线指数:0.12 二氧化碳:404ppm二氧化碳 压力:102126帕 我必须提取‘湿度:’后面的所有数字。。 我想用Regex类,但我不知道怎么做 获取串行数据的我的代码:C# 从字符串c中提取数字,c#,regex,serial-port,substring,extract,C#,Regex,Serial Port,Substring,Extract,我有字符串: 湿度:33% 温度:25.7摄氏度 可见光:112勒克斯 红外辐射:1802.5 mW/m2 紫外线指数:0.12 二氧化碳:404ppm二氧化碳 压力:102126帕 我必须提取‘湿度:’后面的所有数字。。 我想用Regex类,但我不知道怎么做 获取串行数据的我的代码: namespace Demo1Arduino { 谢谢尝试正则表达式,唯一的诀窍是CO2和m2-我们不需要2,这就是为什么我添加了\b: 结果 33; 25.7; 112; 1802.5; 0.12; 4
namespace Demo1Arduino
{
谢谢尝试正则表达式,唯一的诀窍是CO2和m2-我们不需要2,这就是为什么我添加了\b:
结果
33; 25.7; 112; 1802.5; 0.12; 404; 102126
在不知道类型的情况下获取多个数字是没有意义的。我将值放入字典中,以便在代码后面使用该数字。请参阅下面的代码和:
你为什么要使用正则表达式呢?String.Split':';…而且你提供的代码都与你要做的事情无关…你的问题基本上是-我如何从字符串中获取数字?你的代码的其余部分是不相关的。我没有看到足够的研究来解决这个问题。所以这不是我想要的。我该怎么做?服务。你需要我需要提供您可能遇到的问题的详细信息,以及您试图解决的问题。我建议您将其作为一个起点…您的问题是什么?我所看到的是这项任务,这是我的代码。接下来,我们会问一些具体的问题,即我们提供一些代码和所需的输出,以及我们得到的结果,而不是这些。有什么问题吗您选择[0-9]的原因+over\d+?@ThePerplexedOne:\C中的d包括所有数字,例如波斯数字:if Regex.IsMatch۰1777;۳۴۶۷۸۹۹@ThePerplexedOne:Simple test:if Regex.IsMatch۰۱۲۲۳۳,@\d+Console.Writematched!;如果您愿意,您必须添加选项:.Matchessource,@\b\d+:。\d+.\d+。\d+。\d+。\d+。\d+。\d+。\d+。\emascript\emptions,请注意:请参阅从理论上讲,在不知道类型的情况下获取多个数字是否有意义取决于格式:如果我们保证第一个值是湿度,第二个值是温度等,我们可以不使用名称。但是,在一般情况下,需要名称。+1。进一步的泛化增加了域-摄氏度、%,帕等。我不会雇佣任何愿意的人那个
string source =
@"Humidity: 33 %
Temperature: 25.7 deg C
Visible light: 112 lx
Infrared radiation: 1802.5 mW/m2
UV index: 0.12
CO2: 404 ppm CO2
Pressure: 102126 Pa";
string[] numbers = Regex
.Matches(source, @"\b[0-9]+(?:\.[0-9]+)?\b")
.OfType<Match>()
.Select(match => match.Value)
.ToArray();
Console.Write(string.Join("; ", numbers));
33; 25.7; 112; 1802.5; 0.12; 404; 102126
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication55
{
class Program
{
static void Main(string[] args)
{
string[] inputs = {
"Humidity: 33 %",
"Temperature: 25.7 deg C",
"Visible light: 112 lx",
"Infrared radiation: 1802.5 mW/m2",
"UV index: 0.12",
"CO2: 404 ppm CO2",
"Pressure: 102126 Pa"
};
string pattern = @"^(?'name'[^:]+):\s(?'value'[\d.]+)";
Dictionary<string, decimal> dict = new Dictionary<string,decimal>();
foreach(string input in inputs)
{
Match match = Regex.Match(input,pattern);
string name = match.Groups["name"].Value;
decimal value = decimal.Parse(match.Groups["value"].Value);
Console.WriteLine("name = '{0}', value = '{1}'", name, value);
dict.Add(name, value);
}
Console.ReadLine();
}
}
}