2014-02-24 3 views
1

У меня есть ENUM определяются следующим образом:Как найти и определить приоритеты слов из данного списка Enum?

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

Я хотел бы расставить приоритеты в этом и фильтровать его следующим образом:

Да (если телефон еще не подтвержденный получить текст затем принять этот текст, иначе игнорировать и перейти к следующей один) остановке, отменить подписку справки баланса или ИСПОЛЬЗОВАНИЕ ОБНОВЛЕНИЕ

Так в основном, когда пользователь отправляет текст сказать «ДА БАЛАНС», то внутри первым я чек, чтобы видеть, что я f зарегистрирован номер телефона . Если зарегистрировано, я должен использовать текст «Баланс» и вернуть баланс. Но если телефон нам незарегистрирован , тогда я должен использовать текст «ДА», чтобы сначала зарегистрировать телефон и игнорировать остальные. Моя проблема в настоящее время я использую Enum.IsDefined, чтобы узнать, является ли приведенный выше действительный текст, и поскольку у нас есть два разных сочетания текста, они не срабатывают сразу.

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

Так как я переписать ниже IF условие в C#, так что я могу принять как «да» и «Баланс». Должен ли я изменить определение моего Enum или использовать «contains» или использовать regex? Я использую .Net4.5

Пожалуйста, помогите.

После Michaels ответ я могу перебрать строки массива как:

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

Будет ли это работать?

ответ

2

Похоже, вы получаете текстовое сообщение, которое необходимо проанализировать для набора инструкций. После того, как вы проанализировали инструкции, вы можете пересечь репрезентативную структуру данных, такую ​​как массив или абстрактное синтаксическое дерево, и принять решения.

Не зная полного синтаксиса сообщений, которые вы получаете, я могу только угадать, как наилучшим образом их разобрать. Некоторые опции:

  • Разделить сообщение пробелов в массив токенов и проходных лексемы
  • использовать более сложные грамматики разбора библиотеки, такие как Irony

Перечисление может пригодиться, когда определяя набор токенов, которые вы можете проанализировать.


Update: Если вы просто хотите, чтобы разделить строку и посмотреть на каждое слово (или маркер), вы можете использовать что-то вроде:

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

Теперь у вас есть массив строк , и вы можете посмотреть каждую строку в массиве индивидуально. Вы можете увидеть, является ли первая строка «ДА», попытайтесь проанализировать каждую строку как ваш Enum и т. Д.

+0

Мы можем получить текст как «Да Баланс» или текст как «Да» или как «Баланс». Помогает ли это? – Ditty

+0

Затем просто разделите текст на пробелы и посмотрите на термины в результирующем массиве строк. –

+0

Так что я бы использовал что-то вроде myString.split (/ [\ s \ W] + /) – Ditty

Смежные вопросы