对字符串进行标记,以便即使具有多个单词的关键字也被提取为数组的一个元素

时间:2019-06-07 09:08:02

标签: javascript regex ruby tokenize text-processing

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)]

谢谢。

2 个答案:

答案 0 :(得分:1)

这对我有用:

'(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)"]

答案 1 :(得分:1)

str = "(Google AND Microsoft OR Google Pixel AND NOT Apple IOS)"

r = /( AND NOT | OR NOT | AND | OR )/

[str.gsub(r) { |s| ",#{s[1..-2]}," }]
  #=> ["(Google,AND,Microsoft,OR,Google Pixel,AND NOT,Apple IOS)"]     

请注意,在正则表达式中,' AND NOT '必须位于' AND '之前,' OR NOT '必须位于' OR '之前