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)]
谢谢。
答案 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 '
之前