如何检查字符串是否以前缀开头并包含 Ruby 中的特定关键字

How to check if a string begins with prefix and contains specific keyword in Ruby

我正试图找到一种有效的方法来做到这一点。 return 如果条目字符串有 Ph.D/Medical Doctor(这意味着 'Dr.' 的前缀)并且条目中有名称 'Alex' 的函数。

我尝试了下面有效的代码,但我认为应该有一种更有效的方法。我会很感激任何想法。

str1 = "Dr. Moses Alex"
str2 = "Dr. Ben Mora"

def match st
  if st.include?('Dr.') and st.include?('Alex')
    return true
  else 
   return false
 end
end

匹配(str1)#真
匹配(str2)#假

代码看起来不错。我得到的唯一反馈是关于使用 'include?' 函数作为前缀。尝试改用 'start_with?' 函数,这样即使“Dr”在字符串中也不会得到 True。

def match st
  if st.start_with?('Dr.') and st.include?('Alex')  
    return true
  else 
    return false
  end
end

您的代码可以简化为:

def match(string)
  string.start_with?('Dr.') && string.include?('Alex')  
end

这是有效的,因为 Ruby 中的方法总是隐式地 returns 最后一条语句返回的值。因此不需要显式 returns.

我会使用 String#match? 和一个简单的正则表达式:

r = /\ADr\..+\bAlex\b/
"Dr. J. Alex Knowitall".match?(r) #=> true
"He's Dr. J. Alex Knowitall".match?(r) #=> false
"Dr. J. Alexander Knowitall".match?(r) #=> false

我们可以自由间距模式编写正则表达式,使其自记录:

r =
/
\A    # match beginning of string
Dr\.  # match literal "Dr."
.+    # match one or more characters, as many as
      # possible, other than line terminators
\b    # match a word boundary
Alex  # match literal "Alex"
\b    # match a word boundary
/x    # assert free-spacing regex definition mode

对于任何解决方案,如果允许,某些字符串可能会导致问题,例如,“Dr. Bubba Knowitall 和 Alex 是兄弟”。