P: ¿cómo se prueba la igualdad de cadena pero se ignora el caso?
Tengo una situación en la que me gustaría comparar cadenas pero ignorar mayúsculas y minúsculas. El caso es significativo para string-equal
, y aparentemente es insensible a case-fold-search
:
(string-equal "string" "StrinG") ; => nil
(let ((case-fold-search t))
(string-equal "string" "StrinG")) ; => nil
Siempre podría preprocesar las cadenas (por ejemplo, con downcase
) antes de compararlas:
(string-equal (downcase "string")
(downcase "StrinG")) ; => t
Pero eso parece excesivo hacer dos llamadas de funciones adicionales cada vez. ¿He pasado por alto la función de predicado relevante en alguna parte?
Respuestas:
Puedes usar
compare-strings
:Use
nil
s para comenzar y terminar para usar las cadenas completas.fuente
nil
s como mencionaste. Dejaré la pregunta abierta un poco más en caso de que haya otra opción que no requiera 4nil
s adicionales en una llamada de función.Uso
string-suffix-p
:Mucho más simple y no requiere 4
nil
s. No prueba si las cadenas son iguales per se ((string-suffix-p "word" "buzzword" t) ⇒ t
). Aunque, en algunos casos, esto debería ser suficiente (si tiene un diccionario limitado para verificar).fuente
(string-suffix-p "strinG" "this string" t)
También vuelvet
. Esto no es lo que quiere el OP. Le sugiero que modifique o elimine esta respuesta.string-{prefix,suffix}-p
puede ser útil de muchas maneras: pruebe si la palabra en el punto tiene teclado (en SQL, por ejemplo, dónde se pueden mezclar mayúsculas y minúsculas), etc.Otra alternativa corta:
equalp
es la abreviatura decl-equalp
; de(documentation 'equalp)
:fuente