如何查找给定枚举列表中的单词并确定其优先级?

时间:2014-02-24 18:37:27

标签: c# asp.net regex enums

我的ENUM定义如下:

 public enum TextType {
     JOIN,
     SUBSCRIBE,
     STOP,
     HELP,
     CANCEL,
     UNSUBSCRIBE,
     UPGRADE,
     BALANCE,
     USAGE
  }

我想优先考虑并按如下方式对其进行过滤:

是(如果手机尚未验证接收文字,则接受此文字;否则请忽略并转到下一个文本)   停止,取消,取消订阅   救命   平衡或使用   UPGRADE

所以基本上当用户发送文字说“是平衡”然后在内部首先我检查一下是否有电话号码  已经注册。如果注册,那么我应该使用文本“余额”并返回余额。但如果手机我们未注册  然后我应该使用“YES”文本先注册手机然后忽略其余的手机。  我的问题是目前我正在使用Enum.IsDefined来查明上面是否是有效的文本,因为我们有两个  不同的文本结合起来就会立即失败。

 if (Enum.IsDefined(typeof(TextType), VtextType))

那么如何在C#中重写下面的IF条件,以便我能够同时接受'Yes'和'Balance'。我应该更改我的枚举的定义还是应该使用“包含”还是应该使用正则表达式?我正在使用.Net4.5

请帮忙。

在Michaels回复后,我可以循环遍历数组字符串:

foreach (string s in Tokens)
{
    Console.WriteLine(s);
}

这会有用吗?

1 个答案:

答案 0 :(得分:2)

听起来您收到一条纯文本消息,需要解析一组指令。解析完指令后,就可以遍历代表性数据结构,例如数组或抽象语法树,并做出决策。

在不知道您收到的消息的完整语法的情况下,我只能猜测解析它们的最佳方法。一些选项是:

  • 将消息按空格拆分为一个标记数组并循环遍历标记
  • 使用更复杂的语法分析库,例如Irony

在定义您能够解析的令牌集时,枚举可能会派上用场。


更新:如果您只想分割字符串并查看每个单词(或标记),您可以使用以下内容:

var Tokens = Regex.Split(myString, @"\s+");

现在你有了一个字符串数组,你可以分别查看数组中的每个字符串。您可以看到第一个字符串是否为“YES”,尝试将每个字符串解析为您的Enum等。