【问题标题】:Tokenize a string in C# which delimeters contains some parts of other delimeters在 C# 中标记一个字符串,其中分隔符包含其他分隔符的某些部分
【发布时间】:2013-09-24 17:28:06
【问题描述】:

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

>= , >, [ 例如。 >= 包含 >]

假设我有一个字符串

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

如何正确分词?

【问题讨论】:

  • 根据语法的复杂性,解析器生成器可能更适合您的需求。我是 GOLD Parser (goldparser.org) 的忠实粉丝,我过去曾编写过一个编译器和几个使用它的解释器。这是一个很棒的工具。
  • 谢谢皮特。但是我还有一些其他奇怪的运算符。而且“语法”有点模棱两可。

标签: c# tokenize


【解决方案1】:

您是否有理由必须使用正则表达式?我会说,如果您只是在其上使用字符串拆分功能,那对您来说会更容易。如果您从最复杂的运算符 (>=) 开始,那么您不必担心以后会拆分 >。

编辑:在下面添加示例

//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
}

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

【讨论】:

  • 没有。我不必使用正则表达式。通过启动最复杂的运算符,您的意思是将最复杂的运算符写为第一个分隔符?
  • 对,我在想你可以先拆分“>=”,然后拆分“=”和“>”。如果你按那个顺序做,你就不会弄乱“复杂”的运算符。如果您愿意,我可以在我的答案中提供代码示例。
  • 我在正则表达式中使用运算符(>=)出现在另一个运算符(>)之前的模式
猜你喜欢
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 2019-04-04
相关资源
最近更新 更多