Expressões regulares do Python com exemplos

Expressões regulares do Python com exemplos

Uma expressão regular (geralmente abreviada para "regex") é uma técnica e um padrão textual, que define como se deseja pesquisar ou modificar uma determinada string. Expressões regulares são comumente usadas em scripts de shell e código python, bem como em várias outras linguagens de programação.

Neste tutorial, você aprenderá:

  • Como começar com expressões regulares no Python
  • Como importar o módulo Regex Python
  • Como combinar strings e caracteres usando a notação regex
  • Como usar as notações mais comuns do Python Regex
Expressões regulares do Python com exemplos

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Qualquer sistema operacional GNU/Linux
Programas Python 2, Python 3
Outro Acesso privilegiado ao seu sistema Linux como raiz ou através do sudo comando.
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Exemplos de expressões regulares do Python

Em Python, alguém quer importar o módulo para permitir o uso de expressões regulares.

Exemplo 1 Vamos começar com um exemplo simples:

$ python3 python 3.8.2 (padrão, 27 de abril de 2020, 15:53:34) [GCC 9.3.0] No tipo Linux "Ajuda", "Copyright", "Créditos" ou "Licença" para obter mais informações. >>> Imprimir ('Hello World') Hello World >>> Importar re >>> Imprimir (Re.Match ('^.','Olá Mundo')) 
cópia de

Aqui nós impressionamos primeiro Olá Mundo Linha 5 para demonstrar uma configuração de impressão simples. Em seguida, importamos o módulo regex Linha 7 nos envelhecendo para usar o .corresponder Função regular da linha de expressão 8 da biblioteca.

A sintaxe do .corresponder A função é (padrão, string) onde o padrão foi definido como a expressão regular ^.'E nós usamos o mesmo Olá Mundo string como nossa string de entrada.

Como você pode ver, uma partida foi encontrada na carta H. A razão pela qual essa partida foi encontrada é o padrão da expressão regular, a saber; ^ apoia Início da string e . apoia Combine qualquer personagem (exceto a nova linha).

Por isso, H foi encontrado, pois essa carta é diretamente após "o início da string" e é descrita como "qualquer personagem, H nesse caso".

VOCÊ SABIA?
Essas conotações especiais são idênticas às expressões regulares em scripts de bash e outros aplicativos com reconhecimento de regex, que usam um padrão regex uniforme mais ou menos, embora haja diferenças entre idiomas e até implementações específicas se você se aprofundar em expressões regulares um pouco avançar.

Exemplo 2

>>> Imprimir (re.Match ('… W', 'Hello World'))) 
cópia de

Aqui usamos . Para corresponder a qualquer personagem (exceto newline) e fazemos isso 6 vezes antes de combinar o personagem literal C.

Como você pode ver Olá w (7 caracteres) foi comparado. É interessante artigo.

Exemplo 3 Vamos dar outro exemplo um pouco mais complexo:

>>> Imprimir (re.Match ('^H [Elo]+', 'Hello World'))) 
cópia de

A sintaxe neste caso é:

  • ^: Como descrito acima, também pode ser lido como 'este deve ser o começo da string'
  • H: deve combinar H Nesta localização exata (que é diretamente depois/no início da string)
  • [Elo]+: Combine também e,eu ou o (o 'qualquer' definido por [' e ']) e + significa 'um ou mais deles'

Por isso, Olá foi correspondido como H estava de fato no início da corda, e e e o e eu foram correspondidos uma ou mais vezes (em qualquer ordem).

Exemplo 3ready para um super complexo?

>>> Imprimir (re.Findall ('^[ele]+ll [o \ t]+wo [rl].+$ ',' Hello World ')) [' Hello World '];
cópia de

Aqui usamos outra função do módulo RE, ou seja, encontrar tudo que imediatamente produz a string encontrada e usa a mesma sintaxe (padrão, string).

Porque Olá Mundo Combine na íntegra? Vamos quebrá-lo passo a passo:

  • ^: Início da corda
  • [Ele]+: Partidas H e e 1 ou mais vezes, e assim Ele é correspondido
  • ll: correspondência literal de ll Nesse ponto exato, e assim de fato ll é combinado como veio logo depois Ele
  • [o \ t]+: Combine também " (espaço), ou o, ou \ t (uma guia), e que 1 ou mais vezes, e assim o (o espaço) correspondente. Se tivéssemos usado uma guia em vez de um espaço, esse regex ainda funcionaria!
  • Wo: Partida literal de Wo
  • [RL]: Combine também r ou eu. Assista com atenção; apenas r é correspondido aqui! Não há + atrás do ] Então, apenas um único personagem também r ou eu será correspondido nesta posição. Então, por que foi rld ainda correspondente? A resposta está no próximo qualificador;
  • .+: corresponder a qualquer personagem (significado por .) uma ou mais vezes, assim eu e d ambos são correspondidos e nossa corda está completa
  • $: Igual a ^, Este personagem significa "End of String".

Em outras palavras, se tivéssemos colocado isso no início, ou em outro lugar no meio, o regex teria incompatível.

Como um exemplo:

>>> Imprimir (re.Findall ('^Hello $', 'Hello World')) [] >>> PRIMA (RE.Findall ('^Hello $', 'Hello')) [] >>> PRIMA (RE.Findall ('^Hello $', 'Hello')) ['Hello'] >>> Print (RE.Findall ('^Hello', 'Hello World')) ['Hello']
cópia de

Aqui, nenhuma saída é retornada para as duas primeiras impressões, pois estamos tentando combinar uma string que pode ser lida como "start_of_string"-Olá-"END_OF_STRING", conforme significado por ^Olá $, contra Olá Mundo que não corresponde.

No terceiro exemplo, o ^Olá $ partidas Olá Como não há caracteres adicionais no Olá string que faria com que esse regex falhe. Finalmente, o último exemplo mostra uma correspondência parcial sem o requisito para o "end_of_string" ($) acontecer.

Ver? Você já está se tornando um especialista regular em expressões! Expressões regulares podem ser divertidas e são muito poderosas!

Exemplo 4
Existem várias outras funções no Módulo Python, como ré.sub, ré.dividir, ré.subn, ré.procurar, cada um com seus domínios de caso de uso aplicáveis. Vejamos o RE.Sub Próximo:

>>> Imprimir (re.sub ('^hello', 'tchau', 'olá mundo')) tchau mundo
cópia de

A substituição de string é uma das aplicações mais poderosas de expressões regulares, em Python e outros idiomas de codificação. Neste exemplo, procuramos ^Olá e substituí -lo com Bye Bye na string Olá Mundo. Você pode ver como isso seria muito útil para processar todos os tipos de variáveis ​​e seqüências de texto e até arquivos de texto plano inteiros?



Exemplo 5
Vejamos alguns exemplos mais complexos, usando uma sintaxe regex mais avançada:

>>> Imprimir (re.sub ('[0-9]+', '_', 'olá mundo 123')) olá mundo _
cópia de
  • [0-9]+: Qualquer personagem numérico de 0 para 9, uma ou mais vezes.

Você pode ver como o 123 foi substituído por um único _ ?

Exemplo 6

>>> Imprimir (re.sub('(?i) [o-r]+',' _ ',' Olá mundo 123 ')) HELL_ W_LD 123
cópia de
  • (?eu ou]+: Combine um ou mais O para R ou - graças ao opcional eu bandeira - o para r
  • (?eu): predefinir um caso insensível eu bandeira para este padrão
>>> Imprimir (re.sub ('[1] 2', '_', 'olá mundial 111')) olá mundo _1
cópia de
  • [1] 2: Combinar o personagem 1 exatamente duas vezes

Exemplo 7

>>> Imprimir (re.sub ('(mundo)', '\ g \ g', 'olá mundo 123')) olá no mundo mundial 123
cópia de
  • (Mundo): Combine o texto literal 'mundo' e faça dele um grupo que pode ser usado na substituição
  • \ g \ g: O \ g Especifica o primeiro grupo que foi correspondido, eu.e. o texto Mundo tirado do Olá, mundo 123 string, e isso é repetido duas vezes, resultando no Mundo mundial saída. /li>

Exemplo 8

Para deixar isso mais claro, considere os dois exemplos a seguir:

>>> Imprimir (re.sub ('(o)', '\ g \ g \ g', 'olá mundo 123')) hellooo wooorld 123
cópia de

Neste primeiro exemplo, simplesmente combinamos o e coloque -o em um grupo, depois repita esse grupo três vezes.

Observe que, se não nos referirmos ao Grupo 1 (o primeiro grupo correspondente, segundo exemplo de ref), simplesmente não haveria saída e o resultado seria:

>>> Imprimir (re.sub ('(o)', ", 'olá mundo 123')) inferno wrld 123
cópia de

Para o segundo exemplo, considere:

>>> Imprimir (re.sub ('(O).*(r) ',' \ g \ g ',' olá mundo 123 ')) HELLORLD 123
cópia de

Aqui temos dois grupos, o primeiro sendo o (onde quer que esse grupo corresponda, e há claramente múltiplos como visto no primeiro exemplo), e o segundo sendo r. Além disso, usamos .* que se traduz em "qualquer personagem, qualquer número de vezes" - uma expressão regular frequentemente usada.

Então neste exemplo o wor é correspondido por (o).*(r) '(' o Primeiro, depois qualquer personagem até o último r é atingido. A noção "The Last" é muito importante e um erro fácil de cometer, especialmente para novos usuários de expressões regulares. Como exemplo, considere:

>>> Imprimir (re.sub ('e.*o ',' _ ',' Olá, mundo 123 ')) H_RLD 123
cópia de

Você pode ver como o último o foi correspondido?

Voltando ao nosso exemplo:

>>> Imprimir (re.sub ('(O).*(r) ',' \ g \ g ',' olá mundo 123 ')) HELLORLD 123
cópia de

Nós podemos ver isso o wor foi substituído por uma partida do Grupo 1 seguida por uma partida do Grupo 2, resultando em: o wor sendo substituído por ou e assim a saída é HELLORLD 123.



Conclusão

Vejamos algumas das notações regulares mais comuns de expressões disponíveis no Python, combinadas com algumas implementações leves do mesmo:

Lista das notações de expressão regular mais comuns do Python
Notação regex Descrição
. Qualquer personagem, exceto newline
[A-C] Um personagem do intervalo selecionado, neste caso A, B, C
[A-Z] Um personagem do intervalo selecionado, neste caso A-Z
[0-9AF-Z] Um personagem do intervalo selecionado, neste caso 0-9, A e F-Z
[^A-za-z] Um caractere fora do intervalo selecionado, neste caso, por exemplo, '1' se qualificaria
* Qualquer número de correspondências (0 ou mais)
+ 1 ou mais correspondências
? 0 ou 1 correspondência
3 Exatamente 3 correspondências
() Grupo de captura. A primeira vez que isso é usado, o número do grupo é 1, etc.
\ g Uso (inserir) do grupo Capture Match, qualificado pelo número (1-x) do grupo
\ g Grupo especial 0 insere toda a corda correspondente
^ Início da string
$ Final da string
\ d Um dígito
\ D Um não dígito
\ s Um espaço em branco
\ S Um não-whitespace
(?eu) Ignore o prefixo da bandeira do caso, como demonstrado acima
a | d Um personagem dos dois (uma alternativa ao uso []), 'a' ou 'd'
\ Escapa de caracteres especiais
\ b Personagem do backspace
\ n Personagem newline
\ r Caráter de retorno do carro
\ t Caractere de guia

Interessante? Depois de começar a usar expressões regulares, em qualquer idioma, em breve você descobrirá que começará a usá -las em todos os lugares - em outros idiomas de codificação, em seu editor de texto favorito e com reconhecimento de regex, na linha de comando (consulte 'sed' para usuários do Linux), etc.

Você provavelmente também descobrirá que começará a usá-los mais ad-hoc, eu.e. Não apenas na codificação. Há algo inerentemente poderoso em poder controlar todos os tipos de saída da linha de comando, por exemplo, listagens de diretório e arquivos, scripts e gerenciamento de texto de arquivo plano.

Aproveite o seu progresso de aprendizado e poste alguns de seus exemplos de expressão regular mais poderosos abaixo!



Tutoriais do Linux relacionados:

  • Bash Regex avançado com exemplos
  • Bash regexps para iniciantes com exemplos
  • Mastering Bash Script Loops
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Coisas para instalar no Ubuntu 20.04
  • Loops aninhados em scripts de basquete
  • Manipulação de big data para diversão e lucro Parte 3
  • Manipulando a entrada do usuário em scripts bash
  • Crie redirecionar e reescrever regras para .htaccess no apache…
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?