在C#中标记一个字符串,其中delimeters包含其他delimeters的某些部分

在C#中标记一个字符串,其中delimeters包含其他delimeters的某些部分,c#,tokenize,C#,Tokenize,我想使用基于一些运算符的正则表达式来标记字符串。但有些运算符包含其他运算符作为字符串。比如 =,,[例如>=包含>] 假设我有一根绳子 (3>=4)=(3>4)[运算符为>=,!=,>] 如何正确地标记它?有什么理由必须使用正则表达式吗?我想说,如果你只是在上面使用一个字符串拆分函数,你会更容易。如果您从最复杂的运算符(>=)开始,那么您就不必担心以后在>上拆分 编辑:添加下面的示例 //Put operators in order of 'complexity'. Since >= co

我想使用基于一些运算符的正则表达式来标记字符串。但有些运算符包含其他运算符作为字符串。比如

=,[例如>=包含>]

假设我有一根绳子

(3>=4)=(3>4)[运算符为>=,!=,>]


如何正确地标记它?

有什么理由必须使用正则表达式吗?我想说,如果你只是在上面使用一个字符串拆分函数,你会更容易。如果您从最复杂的运算符(>=)开始,那么您就不必担心以后在>上拆分

编辑:添加下面的示例

//Put operators in order of 'complexity'. Since >= contains > and =, comes before them
string[] operators = new string[] {">=", "!=", ">", "="};
string expression = "(3>=4)!=(3>4)";

foreach (string operator in operators)
{
    //Perform logic of creating expression tree here
}

基本上,在循环中,它会分解你的表达式。您需要根据操作顺序在此处构建表达式树。

根据语法的复杂性,解析器生成器可能更适合您的需要。我是goldparser()的忠实粉丝,我以前写过一个编译器和几个解释器使用它。这是个很棒的工具,谢谢你,皮特。但是我还有一些奇怪的运算符,语法有点模棱两可。我不必使用正则表达式。通过启动最复杂的运算符,您的意思是将最复杂的运算符编写为第一个delimeter?对,我想您可以先在“>=”上拆分,然后在“=”和“>”上拆分。如果你按照这个顺序做,你就不会弄乱“复杂”的操作符。如果你愿意的话,我可以在我的答案中提供一个代码示例。我在reqular表达式中使用的模式是,操作符(>=)出现在另一个操作符(>)之前