如何检查字符串是否以前缀开头并包含 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 是兄弟”。
我正试图找到一种有效的方法来做到这一点。 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 是兄弟”。