Expressões regulares do Python com exemplos
- 805
- 87
- Maurice Champlin
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
Requisitos de software e convenções usadas
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 ré
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 ré
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".
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
ouo
(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
ee
1 ou mais vezes, e assimEle
é correspondido - ll: correspondência literal de
ll
Nesse ponto exato, e assim de fatoll
é combinado como veio logo depoisEle
- [o \ t]+: Combine também
"
(espaço), ouo
, ou\ t
(uma guia), e que 1 ou mais vezes, e assimo
(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
oueu
. Assista com atenção; apenasr
é correspondido aqui! Não há+
atrás do]
Então, apenas um único personagem tambémr
oueu
será correspondido nesta posição. Então, por que foirld
ainda correspondente? A resposta está no próximo qualificador; - .+: corresponder a qualquer personagem (significado por
.
) uma ou mais vezes, assimeu
ed
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 ré
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
para9
, 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
paraR
ou - graças ao opcionaleu
bandeira -o
parar
- (?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 textoMundo
tirado doOlá, mundo 123
string, e isso é repetido duas vezes, resultando noMundo 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:
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?
- « Como instalar codecs e extras de terceiros no manjaro linux
- Como instalar um pacote da AUR no Manjaro Linux »