strings palabras mayusculas interpolar imprimir funcion contar concatener comillas cadenas ruby regex

ruby - palabras - Unir una cadena contra mĂșltiples patrones



ruby cadenas (2)

¿Cómo puedo hacer coincidir una cadena con múltiples patrones usando expresiones regulares en ruby?

Estoy tratando de ver si una cadena está incluida en una serie de prefijos. Esto no funciona pero creo que demuestra al menos lo que estoy tratando de hacer.

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


Si puede usar una sola cadena, podría ser más rápido escribir una expresión regular que contenga los valores posibles.

p.ej

/(Mr/.|Mrs/.| ... )/.match(name)


Usa Regexp.union para combinarlos:

union (pats_ary) → new_regexp

Devuelva un objeto Regexp que sea la unión de los patrones dados, es decir, coincidirá con cualquiera de sus partes.

Así que esto hará:

re = Regexp.union(prefixes)

entonces usas re como tu expresión regular:

if name.match(re) #...