Regex: ignorar mayúsculas y minúsculas

316

¿Cómo puedo hacer que la siguiente expresión regular ignore mayúsculas y minúsculas? Debe coincidir con todos los caracteres correctos pero ignorar si son minúsculas o mayúsculas.

G[a-b].*
hermano
fuente
Solo incluya mayúsculas y minúsculas en la expresión regular o convierta a mayúsculas antes de hacer la coincidencia de
expresiones
2
G [a-bA-B]. * Sería lo obvio en este caso general, la distinción entre mayúsculas y minúsculas depende de la plataforma aik y no está dando una plataforma.
Joachim Isaksson
16
Si está utilizando Java, puede especificar esto con la clase del patrón: Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);.
james.garriss
Más opciones de Java aquí: blogs.oracle.com/xuemingshen/entry/…
james.garriss
Tenga en cuenta que para grepello es simplemente la adición del -imodificador. Ej .: grep -rni regular_expressionpara buscar esta 'expresión_ regular' 'r'ecursivamente, use el caso' i'nsensitive, mostrando la línea 'n'umbers en el resultado.
Gabriel Staples

Respuestas:

444

Suponiendo que desea que toda la expresión regular ignore las mayúsculas y minúsculas, debe buscar la ibandera . Casi todos los motores regex lo admiten:

/G[a-b].*/i

string.match("G[a-b].*", "i")

Consulte la documentación de su idioma / plataforma / herramienta para encontrar cómo se especifican los modos coincidentes.

Si desea que solo una parte de la expresión regular no distinga entre mayúsculas y minúsculas (como suponía mi respuesta original), tiene dos opciones:

  1. Utilice los modificadores de modo (?i)y [opcionalmente] (?-i):

    (?i)G[a-b](?-i).*
  2. Ponga todas las variaciones (es decir, minúsculas y mayúsculas) en la expresión regular, útil si no se admiten modificadores de modo:

    [gG][a-bA-B].*

Una última nota: si se trata de caracteres Unicode además de ASCII, verifique si su motor de expresiones regulares los admite o no.

revs mgibsonbr
fuente
¡Brillante! Funciona para: perl -pe 's / ^ utf-8 \? B \?. * $ // gi' Cancer.1631, haciendo coincidir / reemplazando la cadena "UTF-8? B?" en el archivo Cancer.1631. Esto falla: perl -pe 's / ^ utf-8 \? B \?. * $ // g' Cancer.1631, debido a la falta de coincidencia de casos.
Victoria Stuart
Esta publicación sería mucho más clara si no fuera un ejemplo tan específico. ¿Qué sucede si desea ignorar mayúsculas y minúsculas para otra palabra como ".txt" y ".TXT"? Al mirar esta respuesta todavía no estoy seguro de cómo podría hacer esto.
Kyle Bridenstine
Por alguna razón, la expresión regular que ha publicado no funciona en findexpresiones regulares extendidas ... por ejemplo find . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \), no muestra ninguna carpeta ... blanco, una expresión similar find . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)sin los modificadores muestra las carpetas correctas. ¿Alguna idea de por qué?
alpha_989
Aquí estoy tratando de encontrar todas las carpetas a partir de caracteres [a-c]en la carpeta actual solamente .. hacer un poco más de la manipulación ..
alpha_989
Honestamente, pondría la opción 2 en la parte principal de la respuesta, ya que es genérica y funciona con todos los motores de expresiones regulares.
Puterdo Borato
155

Depende de la implementación pero usaría

(?i)G[a-b].

Variaciones

(?i) case-insensitive mode ON    
(?-i) case-insensitive mode OFF

Los sabores regex modernos le permiten aplicar modificadores a solo una parte de la expresión regular. Si inserta el modificador (? Im) en el medio de la expresión regular, entonces el modificador solo se aplica a la parte de la expresión regular a la derecha del modificador. Con estos sabores, puede desactivar los modos precediéndolos con un signo menos (? -I).

La descripción es de la página: https://www.regular-expressions.info/modifiers.html

elrado
fuente
Este es el formato modificador para el motor de búsqueda de expresiones regulares de TortoiseHg.
mwolfe02
¿Podría decirme cómo se puede lograr esto en el shell de Linux (digamos en egrep sin usar el interruptor "-i") genéricamente?
Krishna Gupta
1
Explicar qué (?i)hace y cómo terminarlo ( (?-i)) habría sido realmente útil. Eso es sin duda por qué su respuesta tiene 1/3 tantos votos como la pregunta # 1 en lugar de casi tantos, ya que explican este sutil detalle.
Gabriel Staples
55

expresión regular para validar 'abc' ignorando mayúsculas y minúsculas

(?i)(abc)
Ravinath
fuente
1
Funciona perfectamente con Android Studio logcat
Joe
También funciona en python
conner.xyz
47

La ibandera se usa normalmente para la insensibilidad a mayúsculas y minúsculas. No das un idioma aquí, pero probablemente será algo así como /G[ab].*/io /(?i)G[ab].*/.

chooban
fuente
15

Solo por completo, quería agregar la solución para expresiones regulares en C ++ con Unicode:

std::tr1::wregex pattern(szPattern, std::tr1::regex_constants::icase);

if (std::tr1::regex_match(szString, pattern))
{
...
}
Frankenstein
fuente
1
¿Alguien puede aclararme por qué esta publicación fue rechazada? La solución aceptada utiliza un código específico y, en aras de la exhaustividad, quería agregar la solución para las bibliotecas estándar del lenguaje c ++. En mi opinión, he generado valor agregado a una pregunta más general.
Frankenstein
5

Como descubrí en esta publicación similar ( ignorecase en AWK ), en versiones antiguas de awk (como en Mac OS X), es posible que deba usar 'tolower($0) ~ /pattern/'.

IGNORECASEo (?i)o /pattern/igenerará un error o devolverá verdadero para cada línea.

senortim
fuente
2

C#

using System.Text.RegularExpressions;
...    
Regex.Match(
    input: "Check This String",
    pattern: "Regex Pattern",
    options: RegexOptions.IgnoreCase)

específicamente: opciones: RegexOptions.IgnoreCase

Donkey Kong
fuente
1

[gG] [aAbB]. * probablemente una solución simple si el patrón no es demasiado complicado o largo.

alpha_989
fuente
Me encantaría saber por qué esta respuesta es incorrecta para la pregunta dada.
alpha_989
Lo tienes en tu respuesta "no es demasiado complicado ni largo"
reggaeguitar
Esta es en realidad la única solución que funcionó para mi caso. También parece la solución más genérica que debería funcionar en todas partes. Todas las demás respuestas parecen ser muy específicas para implementaciones de expresiones regulares particulares.
Puterdo Borato
1

Además de las respuestas ya aceptadas:

Uso de grep:

Tenga en cuenta que para grepello es simplemente la adición del -imodificador. Ej .: grep -rni regular_expressionpara buscar esta 'expresión_ regular' 'r'ecursivamente, use el caso' i'nsensitive, mostrando la línea 'n'umbers en el resultado.

Además, aquí hay una gran herramienta para verificar expresiones regulares: https://regex101.com/

Ej: Vea la expresión y explicación en esta imagen.

ingrese la descripción de la imagen aquí

Referencias

Gabriel Staples
fuente
0

En Java, el Regexconstructor tiene

Regex(String pattern, RegexOption option)

Entonces, para ignorar los casos, use

option = RegexOption.IGNORE_CASE
Aziz
fuente
0

Puede practicar Regex en Visual Studio y Visual Studio Code usando buscar / reemplazar.

Debe seleccionar Coincidir mayúsculas y minúsculas para expresiones regulares con mayúsculas. De lo contrario [AZ] no funcionará. Ingrese la descripción de la imagen aquí

Comunidad Visual Studio 2019

David Morrow
fuente
-2

También puede dirigir su cadena inicial, que va a verificar para la coincidencia de patrones, en minúsculas. Y usando en su patrón símbolos en minúsculas respectivamente.

Alexander Drobyshevsky
fuente