求一个数学正则表答式.非常感谢!

dai_oath 2010-11-09 07:01:36
运算符:

+ - * / ^ ^2 ^3(三次方)

符号

( )

数值:

[\d]

参数

这个参数是用户自己定义的,是在另一个页面中.
比如定义 HK 20 ,HH 30 ,TestValue2 32 (HK ,HH 是用户自己定义的,跟定义变量的规则一样的)

这时用户会在这个页面中写一个数学表达式

如: HK+109/(5^2)-10

HH+HK/5*(HK^-1)

如何使用正则判断上面的式子是正确的数据表达式呢?(这里没有小数和负数)

帮大大们帮帮忙.谢谢了.

...全文
170 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dai_oath 2010-11-11
  • 打赏
  • 举报
回复
我都没看懂,我明白上班试试。太感谢你了。。

那天我想了。如是有参数判断太麻烦。我可以把传来的HH KK呀 转换成一个数字。

因为我这里没有负数。是不是就能能判断些呐
兔子-顾问 2010-11-10
  • 打赏
  • 举报
回复
public static void Main()
{
Console.WriteLine(IsValidFormula(new string[] { "HH", "HK" }, "1+HH*1+1"));//True
Console.WriteLine(IsValidFormula(new string[] { "HH", "HK" }, "1+HH1*1+1"));//False
Console.ReadKey();
}

public static bool IsValidFormula(string[] symbols, string test)
{
//^(?!.+?(HK|HH|\d+){2,})(?!.+?([+\-*/^]|HK|HH|\d+)\2)(?!.+[+\-*/^]$)([+\-*/^]|HK|HH|\d+)+$
StringBuilder builder = new StringBuilder();
foreach (string symbol in symbols)
{
builder.Append(Regex.Escape(symbol) + "|");
}
builder.Append(@"\d+");
string pattern = string.Format(@"^(?!.+?(?:{0}){{2,}})(?!.+?([+\-*/^]|{0})\1)(?!.+[+\-*/^]$)([+\-*/^]|{0})+$", builder.ToString());
return Regex.IsMatch(test, pattern);
}
兔子-顾问 2010-11-10
  • 打赏
  • 举报
回复
^(?!.+?([+\-*/^]|HK|HH|\d+)\1)(?!.+[+\-*/^]$)([+\-*/^]|HK|HH|\d+)+$
这样可以?
不懂装懂 2010-11-10
  • 打赏
  • 举报
回复
好难,还是直接用try{}catch{}来判断比较省事
dai_oath 2010-11-10
  • 打赏
  • 举报
回复
我主要是想用户输入的是数学算式 不是其他的东西。如 1++3(3-) 这样就是输入错误阿。1hh*1+1这也错。hh是一个直 1 后边得加运算符的。
sxldfang 2010-11-09
  • 打赏
  • 举报
回复
挨着运算符的不一定是数据啊,比如(3+5)*(2+KK)^(2+HH)
兔子-顾问 2010-11-09
  • 打赏
  • 举报
回复
(HK|HH|[+\-*/^()]|\d+)+
这个意思么?
dai_oath 2010-11-09
  • 打赏
  • 举报
回复
谢谢了 谢谢
dai_oath 2010-11-09
  • 打赏
  • 举报
回复
UP 下..哪位大大帮解决下呀
dai_oath 2010-11-09
  • 打赏
  • 举报
回复
确实挺难的...哪位大帮帮忙呀
phil999 2010-11-09
  • 打赏
  • 举报
回复
难整,弄成表达式树,找找有没有现成的代码

110,533

社区成员

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

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

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