字符串相加

bcacyy 2012-08-02 11:21:22
有如下字符串可能值为
5
10ml
20ML
120ml*4
360+120ML
360+100ml
500ML+300ML
如何转换对应为
5
10
20
120
480
460
800
...全文
384 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcacyy 2012-08-02
  • 打赏
  • 举报
回复
自己在顶下
bcacyy 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

先将字母过滤掉,然后再表达式计算。
如果没有1L+500ML这样的话。
[/Quote]
先将字母都过滤掉了还是不行
threenewbee 2012-08-02
  • 打赏
  • 举报
回复
先将字母过滤掉,然后再表达式计算。
如果没有1L+500ML这样的话。
bcacyy 2012-08-02
  • 打赏
  • 举报
回复
大神们先测试下啊
bcacyy 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

^\d+就可以了。
[/Quote]
不行这样带*号得是正常了
但是360+120ML 结果直接变成360了 我要的结果是480
threenewbee 2012-08-02
  • 打赏
  • 举报
回复
^\d+就可以了。
bcacyy 2012-08-02
  • 打赏
  • 举报
回复
自己顶
bcacyy 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

下面可以将每行的数组提取出来,不过你要处理一下运算符号,乘除加减,或者你改用其他方法
C# code

StreamReader reader = new StreamReader("c:\\1.txt",Encoding.Default);
while (!reader.EndOfStream)
{
……
[/Quote]
这个有问题吧120ml*4 我要的结果是120
bcacyy 2012-08-02
  • 打赏
  • 举报
回复

string rl = "300+120";
//如何转换为420,除了Split('+')分割后相加 有其他办法没
bdmh 2012-08-02
  • 打赏
  • 举报
回复
下面可以将每行的数组提取出来,不过你要处理一下运算符号,乘除加减,或者你改用其他方法

StreamReader reader = new StreamReader("c:\\1.txt",Encoding.Default);
while (!reader.EndOfStream)
{
int num = 0;
string str = reader.ReadLine();
Regex reg = new Regex(@"(?is)\d+");
MatchCollection mc = reg.Matches(str);
foreach (Match m in mc)
{
num += Convert.ToInt32(m.Value);
}
MessageBox.Show(num.ToString());
}
酷儿 2012-08-02
  • 打赏
  • 举报
回复
先转换大小写。统一小写或大写。或后再replace替换一下就OK了。
bcacyy 2012-08-02
  • 打赏
  • 举报
回复
除了先去除ml * 然后分割“+”相加 有其他的方法没有
杰拉尔 2012-08-02
  • 打赏
  • 举报
回复
上面在特殊情况还是有问题我删了个代码就好了



string[] strs ={ "5",
"10ml",
"20ML",
"120ml/4",
"360+120ML123afsda23123/3x5",
"360+100ml+sadfasf",
"500ML+300ML+'asdfa123123.21312"};
foreach (string str in strs)
{


MatchCollection ms = new Regex(@"(?<!.+)\d+|(?<=\+)\d+").Matches(str);
int num = 0;
foreach (Match r in ms) { num += int.Parse(r.Value); };
Response.Write(num + "<br/>");

}

结果
5
10
20
120
480
460
800
杰拉尔 2012-08-02
  • 打赏
  • 举报
回复

string[] strs ={ "5",
"10ml",
"20ML",
"120ml*4",
"360+120ML",
"360+100ml",
"500ML+300ML"};
foreach (string str in strs)
{

var filteredStr=Regex.Replace(str,@"[^\d+*?\d+]", "");
MatchCollection ms = new Regex(@"(?<!.+)\d+|(?<=\+)\d+").Matches(filteredStr);
int num = 0;
foreach (Match r in ms) { num += int.Parse(r.Value); };
Response.Write(num+"<br/>");


5
10
20
120
480
460
800
ParanoidKing 2012-08-02
  • 打赏
  • 举报
回复

string[] source =
{
"5",
"10ml",
"20ML",
"120ml*4",
"360+120ML",
"360+100ml",
"500ML+300ML",
};

System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"([^\d\+\*])|(\*\d+)");
System.Data.DataTable dt = new System.Data.DataTable();
foreach (string s in source)
{
string result = dt.Compute(reg.Replace(s, string.Empty), null).ToString();
}
bcacyy 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

应该没什么简单的办法吧

C# code
string text = @"5
10ml
20ML
120ml*4
360+120ML
……
[/Quote]
这个能用一个正则表达式 搞定么
gudujianxiao 2012-08-02
  • 打赏
  • 举报
回复
好神奇的需求啊
huwei001982 2012-08-02
  • 打赏
  • 举报
回复
应该没什么简单的办法吧

string text = @"5
10ml
20ML
120ml*4
360+120ML
360+100ml
500ML+300ML";
text = Regex.Replace(text, "[a-zA-Z]", "");
text = Regex.Replace(text, @"(?!\d+)(\*.*)", "");
var matches = Regex.Matches(text, @"(\d+)(\+(\d+))*");
foreach (Match match in matches)
{
if (match.Groups[2].Success)
Console.WriteLine(Convert.ToInt32(match.Groups[1].Value)
+
Convert.ToInt32(match.Groups[3].Value));
else
Console.WriteLine(Convert.ToInt32(match.Groups[1].Value));
}

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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