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次
————————————————
版权声明:本文为CSDN博主「guanguan1117」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/guanguan1117/article/details/108379042
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步