Regex: ignora la distinzione tra maiuscole e minuscole


316

Come posso fare in modo che il seguente regex ignori la distinzione tra maiuscole e minuscole? Deve corrispondere a tutti i caratteri corretti, ma ignora se sono maiuscoli o minuscoli.

G[a-b].*

Basta avere sia maiuscole che minuscole incluse nel regex o convertirle in maiuscolo prima di eseguire la corrispondenza regex
Chetter Hummin

2
G [a-bA-B]. * Sarebbe ovvio in questo caso generale, la distinzione tra maiuscole e minuscole dipende dalla piattaforma e non stai dando una piattaforma.
Joachim Isaksson l'

16
Se stai usando Java, è possibile specificare questo con la classe del modello: Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);.
james.garriss,


Si noti che per greping è semplicemente l'aggiunta del -imodificatore. Esempio: grep -rni regular_expressionper cercare questa 'espressione_ regolare' 'in modo progressivo, caso' i 'sensibile, che mostra la riga' n 'numeri nel risultato.
Gabriel Staples,

Risposte:


444

Supponendo che desideri che l' intera regex ignori il caso, dovresti cercare la ibandiera . Quasi tutti i motori regex lo supportano:

/G[a-b].*/i

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

Controlla la documentazione per la tua lingua / piattaforma / strumento per scoprire come sono specificate le modalità di corrispondenza.

Se vuoi che solo una parte del regex non faccia distinzione tra maiuscole e minuscole (come presumeva la mia risposta originale), allora hai due opzioni:

  1. Utilizzare i modificatori di modalità (?i)e [facoltativamente] (?-i):

    (?i)G[a-b](?-i).*
  2. Inserisci tutte le varianti (cioè minuscole e maiuscole) in regex, utile se i modificatori di modalità non sono supportati:

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

Un'ultima nota: se hai a che fare con caratteri Unicode oltre a ASCII, controlla se il tuo motore regex li supporta correttamente.


Brillante! Funziona per: perl -pe 's / ^ utf-8 \? B \?. * $ // gi' Cancer.1631, corrispondente / sostituendo la stringa "UTF-8? B?" nel file Cancer.1631. Questo non riesce: perl -pe 's / ^ utf-8 \? B \?. * $ // g' Cancer.1631, a causa della mancata corrispondenza del caso.
Victoria Stuart,

Questo post sarebbe molto più chiaro se non fosse un esempio così specifico. Ad esempio, se si desidera ignorare il caso di un'altra parola come ".txt" e ".TXT". Da questa risposta non sono ancora sicuro di come potrei farlo.
Kyle Bridenstine,

Per qualche motivo la regex che hai postato non funziona in findregex esteso .. per esempio find . \( -type d -regextype posix-extended -regex '/./[a-c][^.]*/i' \)non mostra alcuna cartella .. bianco un registro simile find . \( -type d -regextype posix-extended -regex './[a-c][^.]*' \)senza i modificatori mostra le cartelle corrette. Qualche idea sul perché?
alpha_989,

Qui sto cercando di trovare tutte le cartelle che iniziano con i caratteri solo [a-c]nella cartella corrente .. per fare qualche altra manipolazione ..
alpha_989

Onestamente metterei l'opzione 2 nella parte principale della risposta in quanto è generico e funziona con tutti i motori regex.
Puterdo Borato,

154

Dipende dall'implementazione, ma vorrei usare

(?i)G[a-b].

Variazioni:

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

I moderni sapori regex consentono di applicare modificatori solo a una parte dell'espressione regolare. Se si inserisce il modificatore (? Im) nel mezzo del regex, il modificatore si applica solo alla parte del regex a destra del modificatore. Con questi gusti, puoi disattivare le modalità precedendole con un segno meno (? -I).

La descrizione è dalla pagina: https://www.regular-expressions.info/modifiers.html


Questo è il formato modificatore per il motore regex di ricerca di TortoiseHg.
mwolfe02,

Potresti dirmi come questo può essere ottenuto nella shell di Linux (diciamo in egrep senza usare l'opzione "-i") genericamente?
Krishna Gupta,

1
Spiegare cosa (?i)fa e come terminarlo ( (?-i)) sarebbe stato davvero utile. Questo è senza dubbio il motivo per cui la tua risposta ha 1/3 del numero di voti rispetto alla domanda n. 1 anziché quasi quanti, in quanto spiegano questo sottile dettaglio.
Gabriel Staples,

55

espressione regolare per validare 'abc' ignorando la distinzione tra maiuscole e minuscole

(?i)(abc)

1
Funziona perfettamente con Android Studio logcat
Joe

Funziona anche in Python
conner.xyz il

47

La ibandiera viene normalmente utilizzata per l'insensibilità al caso. Non dai una lingua qui, ma probabilmente sarà qualcosa di simile /G[ab].*/io /(?i)G[ab].*/.


15

Solo per completezza ho voluto aggiungere la soluzione per le espressioni regolari in C ++ con Unicode:

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

if (std::tr1::regex_match(szString, pattern))
{
...
}

1
Qualcuno può chiarirmi perché questo post è stato sottoposto a downgrade? La soluzione accettata utilizza un codice specifico e per completezza ho voluto aggiungere la soluzione per le librerie standard del linguaggio c ++. A mio avviso, ho generato un valore aggiunto per una domanda più generale.
Frankenstein,

5

Come ho scoperto da questo post simile ( ignorecase in AWK ), su vecchie versioni di awk (come su Mac OS X vaniglia), potrebbe essere necessario utilizzare 'tolower($0) ~ /pattern/'.

IGNORECASEo (?i)o /pattern/igenererà un errore o restituirà true per ogni riga.


2

C #

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

in particolare: opzioni: RegexOptions.IgnoreCase


1

[gG] [aAbB]. * probabilmente semplifica la soluzione se il modello non è troppo complicato o lungo.


ti piacerebbe sapere perché questa risposta è errata per la domanda data?
alpha_989,

Lo hai nella tua risposta "non è troppo complicato o lungo"
reggaeguitar

Questa è in realtà l'unica soluzione che ha funzionato per il mio caso. Inoltre sembra la soluzione più generica che dovrebbe funzionare ovunque. Tutte le altre risposte sembrano essere molto specifiche per implementazioni regex particolari.
Puterdo Borato,

1

Aggiunta alle risposte già accettate:

Utilizzo Grep:

Si noti che per greping è semplicemente l'aggiunta del -imodificatore. Esempio: grep -rni regular_expressionper cercare questa 'espressione_ regolare' 'in modo progressivo, caso' i 'sensibile, che mostra la riga' n 'numeri nel risultato.

Inoltre, ecco un ottimo strumento per verificare le espressioni regolari: https://regex101.com/

Esempio: vedere l'espressione e la spiegazione in questa immagine.

inserisci qui la descrizione dell'immagine

Riferimenti:


0

In Java, il Regexcostruttore ha

Regex(String pattern, RegexOption option)

Quindi, per ignorare i casi, utilizzare

option = RegexOption.IGNORE_CASE

0

È possibile esercitarsi con Regex in Visual Studio e Visual Studio Code usando trova / sostituisci.

È necessario selezionare sia Match Case sia Regular Expressions per le espressioni regex con case. Altrimenti [AZ] non funzionerà qui. Descrizione dell'immagine qui

Comunità di Visual Studio 2019


-2

Puoi anche portare la stringa iniziale, che stai per verificare la corrispondenza del motivo, in lettere minuscole. E usando nel tuo modello simboli minuscoli rispettivamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.