¿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.
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);.
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:
Utilice los modificadores de modo (?i)y [opcionalmente] (?-i):
(?i)G[a-b](?-i).*
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).
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
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].*/.
¿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.
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.
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í
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.
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
.grep
ello es simplemente la adición del-i
modificador. Ej .:grep -rni regular_expression
para buscar esta 'expresión_ regular' 'r'ecursivamente, use el caso' i'nsensitive, mostrando la línea 'n'umbers en el resultado.Respuestas:
Suponiendo que desea que toda la expresión regular ignore las mayúsculas y minúsculas, debe buscar la
i
bandera . Casi todos los motores regex lo admiten: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:
Utilice los modificadores de modo
(?i)
y [opcionalmente](?-i)
:Ponga todas las variaciones (es decir, minúsculas y mayúsculas) en la expresión regular, útil si no se admiten modificadores de modo:
Una última nota: si se trata de caracteres Unicode además de ASCII, verifique si su motor de expresiones regulares los admite o no.
fuente
find
expresiones regulares extendidas ... por ejemplofind . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)
, no muestra ninguna carpeta ... blanco, una expresión similarfind . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)
sin los modificadores muestra las carpetas correctas. ¿Alguna idea de por qué?[a-c]
en la carpeta actual solamente .. hacer un poco más de la manipulación ..Depende de la implementación pero usaría
Variaciones
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
fuente
(?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.expresión regular para validar 'abc' ignorando mayúsculas y minúsculas
fuente
La
i
bandera 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].*/i
o/(?i)G[ab].*/
.fuente
Solo por completo, quería agregar la solución para expresiones regulares en C ++ con Unicode:
fuente
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/'
.IGNORECASE
o(?i)
o/pattern/i
generará un error o devolverá verdadero para cada línea.fuente
C#
específicamente: opciones: RegexOptions.IgnoreCase
fuente
[gG] [aAbB]. * probablemente una solución simple si el patrón no es demasiado complicado o largo.
fuente
Además de las respuestas ya aceptadas:
Uso de grep:
Tenga en cuenta que para
grep
ello es simplemente la adición del-i
modificador. Ej .:grep -rni regular_expression
para 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.
Referencias
man grep
)fuente
En Java, el
Regex
constructor tieneEntonces, para ignorar los casos, use
fuente
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í
fuente
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.
fuente