[英]How to find a keyword in a string
用戶發送必須包含關鍵字的smses。 然后,此關鍵字用於查找業務。
該指令是在句子的開頭使用關鍵字。
我知道有些用戶不會在開頭使用關鍵字,或者會在關鍵字中添加標簽(#@ - )或標點符號(keyword。)。
查找此關鍵字和業務的有效方法是什么?
我的嘗試:
scrubbed_message = msg.gsub("\"", "").gsub("\'", "").gsub("#", "").gsub("-", "").gsub(",", "").gsub(".", "").gsub("@", "").split.join(" ")
tag = scrubbed_msg.split[0]
if @business = Business.where(tag: tag).first
log_message(@business)
else
scrubbed_msg.split.each do |w|
if @business = Business.where(tag: w).first
log_message(@business)
end
end
end
您可以使用Regexp
匹配來過濾String
所有不必要的字符,然后在#reduce
字符串的Array
git上使用#reduce
方法,以獲得帶有與關鍵字匹配的標記字段的記錄的第一次出現,在exmaple: keyword,tag1中,tag2 :
msg = "key.w,ord tag-1'\n\"tag2"
# => "key.w,ord tag-1'\n\"tag2"
scrubbed = msg.gsub(/[#'"\-\.,@]/, "").split
# => ["keyword", "tag1", "tag2"]
@business = scrubbed.reduce(nil) do| sum, tag |
sum || Business.where(tag: tag).first
end
# => Record tag: keyword
# => Record tag: tag1 if on record with keyword found
我建議使用白名單方法來指定要保留哪些字符,例如字母數字字符,而不是要從字符串中刪除哪些字符:
sms = "#keyword and the rest"
clean_sms = sms.scan(/[\p{Alnum}]+/)
# => ["keyword", "and", "the", "rest"]
然后,如果我做對了你想要做的事情,找到你正在尋找的業務,你可以這樣做:
first_existing_tag = clean_sms.find do |tag|
Business.exists?(tag: tag)
end
@business = Business.where(tag: first_existing_tag).first
log_message(@business)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.