• 全部
...

求教:怎么从字符串中提取多个数字,包括小数

肖恩 2020-12-26 12:45:59


  1. string str="气压:097.71kPa 气温:023.46度 湿温:023.5度 湿度:026.1%RH 露点:002.9度";

怎么能提取出里面所有的数字,结果应该是:
97.71
23.46
23.5
26.1
2.9
不能用分割字符串的方法,因为不同的设备传回来的字符串格式不一致?
求大神帮忙!!!!
...全文
给本帖投票
5836 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
正则表达式,不好好读书的痛啊
ziqi0716 2020-12-28
  • 打赏
  • 举报
回复
先按空格分割,再根据字符串头进行分割解析,也没啥难度的,都用不着正则
Denuin多啦咧梦 2020-12-27
  • 打赏
  • 举报
回复 1

string s = "气压:097.71kPa   气温:023.46度   湿温:023.5度   湿度:026.1%RH   露点:002.9度";
string pattern = @"([-]*)[0]*([\d]+.[\d]*)";
MatchCollection mc = Regex.Matches(s, pattern);
foreach (Match m in mc)
{
    Console.WriteLine($"{m.Groups[1].Value}{m.Groups[2].Value}");
}
秃出人才 2022-06-21
  • 举报
回复
@Denuin多啦咧梦 大佬问一下我要怎么提取到这里Match m的数据到int或者short中呢
HerryDong 2020-12-27
  • 打赏
  • 举报
回复
逐个读取字符即可:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<double> nums = GetNumsList("气压:097.71kPa   气温:023.46度   湿温:023.5度   湿度:026.1%RH   露点:002.9度");
            foreach (double num in nums)
            {
                Console.WriteLine(num);
            }
            Console.ReadKey(true);
        }

        static List<double> GetNumsList(string str)
        {
            List<double> list = new List<double>();
            List<char> nums = new List<char>();
            for (int i = 0; i < str.Length; i++)
            {
                if (str[i] >= 48 && str[i] <= 57)
                {
                    nums.Add(str[i]);
                }
                else if (str[i] == '.')
                {
                    nums.Add(str[i]);
                }
                else
                {
                    if (nums.Count > 0)
                    {
                        string num = new string(nums.ToArray());
                        list.Add(double.Parse(num));
                        nums.Clear();
                    }
                }
            }
            return list;
        }
    }
}
luj_1768 2020-12-27
  • 打赏
  • 举报
回复
1. 把str截取为5个子字符串(空格分隔); 2. 把每个子字符串在分割成3个子字符串(标点,数字、非数字) 3. 然后就好办了吧?
复杂的落叶 2020-12-26
  • 打赏
  • 举报
回复
可以先格式化读取然后再转为浮点数。以第一个数值为例:sscanf(str, "%6s%6s%3s" , str1,str2,str3)。这里将“气温:”给str1,“097.71”给str2,“kPa”给str3。此时,得到的“097.71”是字符串,可以利用atof()函数,将字符转为浮点数。
极客诗人 2020-12-26
  • 打赏
  • 举报
回复
用正则 /[-+]?[0-9]*\.?[0-9]+/
休闲中 2020-12-26
  • 打赏
  • 举报
回复
也可以,一个字符一个字符判断,在数字范围的保留,包括小数点
7嗨嗨 2020-12-26
  • 打赏
  • 举报
回复
不能用分割字符串的方法?for循环取出数字...
wllllll 2020-12-26
  • 打赏
  • 举报
回复
正则: [0-9]+|[0-9]+\.[0-9]*?

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部