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].*

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


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.


¡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


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)

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].*/.


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))
{
...
}

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.


2

C#

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

específicamente: opciones: RegexOptions.IgnoreCase


1

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


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


0

En Java, el Regexconstructor tiene

Regex(String pattern, RegexOption option)

Entonces, para ignorar los casos, use

option = RegexOption.IGNORE_CASE

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


-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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.