正则表达式验证前缀,中缀和后缀表达式

时间:2016-05-18 02:03:52

标签: c# regex

我需要在C#中创建一个程序,将一个Infix表达式转换为Prefix和Postfix,将Prefix表达式转换为Postfix和Infix,将Postfix表达式转换为Infix和Prefix。然而,这不是问题,"处理部分"该计划已经完成。

我现在需要的是一个正则表达式来验证用户输入是否为Infix,Prefix或Postfix表达式,因此根据输入我调用另一个函数来执行转换。

输入始终为:
对于操作数:从A到Z的大写单字母 对于运营商:+, - ,*和/

对于Infix表达式,我创建了这个正则表达式(似乎工作正常):
"^(([A-Z])(([+]|[-]|[*]|[/])([A-Z]))*)$"

但是我试图为Prefix和Postfix表达式做一个正则表达式。我也没有在互联网上找到任何东西。

有人能给我一个亮点吗?

1 个答案:

答案 0 :(得分:0)

不幸的是,如果没有递归正则表达式(C#不支持),这是不可能的。虽然(格式良好的)中缀符号可以与简单的正则表达式[A-Z](?:[*/+-][A-Z])*匹配,但前缀和后缀符号不会遵循这样一个简单的模式,即它们可以通过非递归正则表达式进行匹配。

也就是说,确定表达式是否使用前/后符号(而不验证其正确性)的一种非常简单的方法是检查第一个/最后一个字符是否为运算符:^[*/+-]将匹配一个井 - 形成前缀表达式并.*[*/+-]$格式良好的后缀表达式。