c#关于用正则表达式实现字符串中截取数字小案例

c#关于用正则表达式实现字符串中截取数字小案例

最近工作中遇到一些关于字符串截取的问题,发现用正则表达式截取更为方便,想起来快两年没有写过博客了,开始上Demo小案例,希望对大家也有用~
案例背景:我想要在一串包含数据结果的字符串中截取出来里面包含的数字,数字的类型可能是整数、小数、正负数、科学计数法等。
案例实现:上代码

        private void button1_Click(object sender, EventArgs e)
        {
            float ss = 0;
            string line = matchline(textBox1.Text);
            if (line == "")
            {
                MessageBox.Show("返回错误");
                return;
            }
            else
            {
                string[] fields = line.Split(new char[] { ' ', ',' });
                int n = fields.Length;
                for (int i = 0; i < n; i++)
                {
                    if (!(fields[i]).Contains(":"))
                    {
                        if (!String.IsNullOrEmpty(fields[i]))
                        {
                            ss = Convert.ToSingle(fields[i]);
                        }
                        else
                        {
                            ss = 0;
                        }
                    }
                }
            }
            textBox2.Text = ss.ToString();
        }
        //主要截取方法
        private string matchline(string pkg)
        {
            // pkg = pkg.Trim();//可移除当前字符串前的空白字符  
            //Regex reg = new Regex("\\d+\\.?\\d*");//可截取包含小数或者正数的数字
            //Regex reg1 = new Regex(@"[+-]?\d+[\.]?\d*");//可截取包含小数或者负数的数字   
            //Regex reg2 = new Regex(@"(\s[+-]?\d+)([\.]?)([\d]*)([A-F]?)([+-]?)([\d]*)");可截取整数、小数、正负数、科学计数法
            Regex reg3 = new Regex(@"(\s[+-]?\d+)([\:]*)([\s]*)([\d]*)([\.]*)([\d]*)([A-F]?)([+-]?)([\d]*)");
            var d2 = reg3.Matches(pkg);        
            return d2[0].Value;
        }
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox1.Checked)
            {
                checkBox2.Checked = false;
                checkBox3.Checked = false;
                checkBox4.Checked = false;
                textBox1.Clear();
                textBox1.Text = label2.Text;
            }
        }
        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox2.Checked)
            {
                checkBox1.Checked = false;
                checkBox3.Checked = false;
                checkBox4.Checked = false;
                textBox1.Clear();
                textBox1.Text = label3.Text;
            }
        }
        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox3.Checked)
            {
                checkBox1.Checked = false;
                checkBox2.Checked = false;
                checkBox4.Checked = false;
                textBox1.Clear();
                textBox1.Text = label5.Text;
            }
        }
        private void checkBox4_CheckedChanged(object sender, EventArgs e)
        {
            if (checkBox4.Checked)
            {
                checkBox1.Checked = false;
                checkBox2.Checked = false;
                checkBox3.Checked = false;
                textBox1.Clear();
                textBox1.Text = label6.Text;
            }
        }

案例实现界面
注:所有数据前都有一个空格,因此在使用正则表达式时先使用了\s为开头,其中选择4中 ‘ 3: 5.000E+02 ’ 为项目中使用,我只需要5.000E+02这段,因此代码中的正则表达式那行使用了reg3,此表达式为可截取整数、小数、正负数、科学计数法及科学计数法前包含的数字和冒号,这几种类型。如科学计数法前面没有数字冒号,只有科学计数法数据时,可用reg2即可。
最后写几个自己在使用正则表达式的小总结:
\s 表示空格
()可理解为或者
[]相当于if
\d为数字0~9
.为匹配 小数点
:为匹配 冒号
A-F为匹配英文字符A~F
?为匹配前面的子表达式0次或1次
+为匹配前面的子表达式1次或N次
*为匹配前面的子表达式0次或N次

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值