簡體   English   中英

如何在字符串中查找關鍵字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM