我需要在C#中创建一个程序,将一个Infix表达式转换为Prefix和Postfix,将Prefix表达式转换为Postfix和Infix,将Postfix表达式转换为Infix和Prefix。然而,这不是问题,"处理部分"该计划已经完成。
我现在需要的是一个正则表达式来验证用户输入是否为Infix,Prefix或Postfix表达式,因此根据输入我调用另一个函数来执行转换。
输入始终为:
对于操作数:从A到Z的大写单字母
对于运营商:+, - ,*和/
对于Infix表达式,我创建了这个正则表达式(似乎工作正常):
"^(([A-Z])(([+]|[-]|[*]|[/])([A-Z]))*)$"
但是我试图为Prefix和Postfix表达式做一个正则表达式。我也没有在互联网上找到任何东西。
有人能给我一个亮点吗?
答案 0 :(得分:0)
不幸的是,如果没有递归正则表达式(C#不支持),这是不可能的。虽然(格式良好的)中缀符号可以与简单的正则表达式[A-Z](?:[*/+-][A-Z])*
匹配,但前缀和后缀符号不会遵循这样一个简单的模式,即它们可以通过非递归正则表达式进行匹配。
也就是说,确定表达式是否使用前/后符号(而不验证其正确性)的一种非常简单的方法是检查第一个/最后一个字符是否为运算符:^[*/+-]
将匹配一个井 - 形成前缀表达式并.*[*/+-]$
格式良好的后缀表达式。