Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 根据多个模式匹配字符串_Ruby_Regex - Fatal编程技术网

Ruby 根据多个模式匹配字符串

Ruby 根据多个模式匹配字符串,ruby,regex,Ruby,Regex,如何在ruby中使用正则表达式将字符串与多个模式进行匹配 我试图看看一个字符串是否包含在前缀数组中,这是不起作用的,但我认为它至少演示了我正在尝试做的事情 # example: # prefixes.include?("Mrs. Kirsten Hess") prefixes.include?(name) # should return true / false prefixes = [ /Ms\.?/i, /Miss/i, /Mrs\.?/i, /Mr\.?/i, /M

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

我试图看看一个字符串是否包含在前缀数组中,这是不起作用的,但我认为它至少演示了我正在尝试做的事情

# 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
]

如果可以使用单个字符串,那么编写包含可能值的正则表达式可能会更快

e、 g

/(先生\夫人\女士)/.match(姓名) 用于组合它们:

联合(部分)→ 新的_regexp

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

这样做可以:

re = Regexp.union(prefixes)
然后使用
re
作为正则表达式:

if name.match(re)
    #...

@凯尔:谢谢
Regexp.union
使用起来比手工构建一个大的替换正则表达式要好得多。
if name.match(re)
    #...