Токенизируйте строку так, чтобы даже ключевые слова, содержащие несколько слов, извлекались как один элемент массива - PullRequest
0 голосов
/ 07 июня 2019
Input:(Google AND Microsoft OR Google Pixel AND NOT Apple IOS)
Desired Output:[(Google,AND,Microsoft,OR,Google Pixel,AND,NOT,Apple IOS)]
Ideal Output:[(Google,AND,Microsoft,OR,Google Pixel,AND NOT,Apple IOS)]

Итак, я хочу, чтобы какой-нибудь токенизатор или метод извлечения текста применялся на входе, чтобы получить любой из 2 выходов, как указано ниже.

В настоящее время я использую регулярное выражение для токенизации слов на «» и не ломаю слова, которые имеют «» (кавычки вокруг них)

Используемое регулярное выражение: /'[^']*'|[^\s]+/ (PCRE)

Current Input:(Google AND Microsoft OR 'Google Pixel' AND NOT 'Apple IOS') 

Это работает из-за кавычек вокруг ключевого слова с несколькими словами.

Current Output:[(Google,AND,Microsoft,OR,Google Pixel,AND,NOT,Apple IOS)]

Спасибо.

1 Ответ

1 голос
/ 07 июня 2019

это сработало для меня:

'(Google AND Microsoft OR Google Pixel AND NOT Apple IOS)'
  .split(/(AND|OR|NOT)/)
  .map {|e| e.strip}
  .reject {|e| e.empty? }

=> ["(Google", "AND", "Microsoft", "OR", "Google Pixel", "AND", "NOT", "Apple IOS)"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...