如何在ruby中使用正则表达式将字符串与多个模式进行匹配.

我想看看一个字符串是否包含在一个前缀数组中,这不起作用,但我认为它至少说明了我在try 做什么.

# example:
# prefixes.include?("Mrs. Kirsten Hess")

prefixes.include?(name) # should return true / false

prefixes = [
  /Ms\.?/i,
  /Miss/i,
  /Mrs\.?/i,
  /Mr\.?/i,
  /Master/i,
  /Rev\.?/i,
  /Reverend/i,
  /Fr\.?/i,
  /Father/i,
  /Dr\.?/i,
  /Doctor/i,
  /Atty\.?/i,
  /Attorney/i,
  /Prof\.?/i,
  /Professor/i,
  /Hon\.?/i,
  /Honorable/i,
  /Pres\.?/i,
  /President/i,
  /Gov\.?/i,
  /Governor/i,
  /Coach/i,
  /Ofc\.?/i,
  /Officer/i,
  /Msgr\.?/i,
  /Monsignor/i,
  /Sr\.?/i,
  /Sister\.?/i,
  /Br\.?/i,
  /Brother/i,
  /Supt\.?/i,
  /Superintendent/i,
  /Rep\.?/i,
  /Representative/i,
  /Sen\.?/i,
  /Senator/i,
  /Amb\.?/i,
  /Ambassador/i,
  /Treas\.?/i,
  /Treasurer/i,
  /Sec\.?/i,
  /Secretary/i,
  /Pvt\.?/i,
  /Private/i,
  /Cpl\.?/i,
  /Corporal/i,
  /Sgt\.?/i,
  /Sargent/i,
  /Adm\.?/i,
  /Administrative/i,
  /Maj\.?/i,
  /Major/i,
  /Capt\.?/i,
  /Captain/i,
  /Cmdr\.?/i,
  /Commander/i,
  /Lt\.?/i,
  /Lieutenant/i,
  /^Lt Col\.?$/i,
  /^Lieutenant Col$/i,
  /Col\.?/i,
  /Colonel/i,
  /Gen\.?/i,
  /General/i
]

推荐答案

使用Regexp.union来组合它们:

union(pats_ary) → new_regexp

返回一个Regexp对象,该对象是给定patterns的并集,即将匹配其任何部分.

这样就可以了:

re = Regexp.union(prefixes)

然后使用re作为正则表达式:

if name.match(re)
    #...

Ruby相关问答推荐

Ruby错误-应为数组或字符串,已获取哈希

使用 RSpec 测试嵌套哈希时随机排序数组的匹配

如果嵌套数组为空,如何判断 ruby​​?

如何在 OpenURI 中指定http 请求标头

如何拯救 Ruby 中的 eval?

ruby命令在我的 Mac 上没有任何作用

将字符串与多个模式匹配

理解|| Ruby 中 If 条件中的 OR 运算符

如何删除字符串中的重复空格?

在 Pry 中有相当于 next 的吗?

RSpec:每次指定对具有不同参数的方法的多次调用

如何在Ruby中获取终端窗口的宽度

无法将 RVM 安装的 Ruby 与 sudo 一起使用

Ruby中的file.open、open和IO.foreach,有什么区别?

跳过 Enumerable#collect 中的迭代

如何在 Ruby 中获取命名空间中的所有类名?

默认情况下需要查找的路径是什么?

从数组 Ruby 中删除元素

将 Nokogiri 文档转换为 Ruby 哈希

如何判断一个类是否已定义?