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

tech2022-11-27  79

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次

最新回复(0)