Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Python RegEx

Python RegEx


Neste tutorial, você aprenderá sobre expressões regulares (RegEx) e usará o módulo re do Python para trabalhar com RegEx (com a ajuda de exemplos).

Um Reg ular Ex pression (RegEx) é uma sequência de caracteres que define um padrão de pesquisa. Por exemplo,

^a...s$

O código acima define um padrão RegEx. O padrão é:qualquer string de cinco letras começando com a e terminando com s .

Um padrão definido usando RegEx pode ser usado para corresponder a uma string.
Expressão String Combinado?
^a...s$ abs Nenhuma correspondência
alias Corresponder
abyss Corresponder
Alias Nenhuma correspondência
An abacus Nenhuma correspondência


Python tem um módulo chamado re para trabalhar com RegEx. Aqui está um exemplo:
import re

pattern = '^a...s$'
test_string = 'abyss'
result = re.match(pattern, test_string)

if result:
  print("Search successful.")
else:
  print("Search unsuccessful.")	

Aqui, usamos re.match() função para pesquisar padrão dentro da test_string . O método retorna um objeto de correspondência se a pesquisa for bem-sucedida. Caso contrário, ele retornará None .


Existem várias outras funções definidas no re módulo para trabalhar com RegEx. Antes de explorarmos isso, vamos aprender sobre as próprias expressões regulares.

Se você já conhece o básico do RegEx, pule para o Python RegEx.

Especificar padrão usando RegEx


Para especificar expressões regulares, são usados ​​metacaracteres. No exemplo acima, ^ e $ são metacaracteres.

Metacaracteres


Metacaracteres são caracteres que são interpretados de maneira especial por um mecanismo RegEx. Aqui está uma lista de metacaracteres:

[] . ^ $ * + ? {} () \ |


[] - Colchetes

Os colchetes especificam um conjunto de caracteres que você deseja corresponder.
Expressão String Combinado?
[abc] a 1 correspondência
ac 2 correspondências
Hey Jude Nenhuma correspondência
abc de ca 5 correspondências

Aqui, [abc] irá corresponder se a string que você está tentando corresponder contiver qualquer um dos a , b ou c .

Você também pode especificar um intervalo de caracteres usando - dentro de colchetes.

Você pode complementar (inverter) o conjunto de caracteres usando o acento circunflexo ^ símbolo no início de um colchete.


. - Período

Um ponto corresponde a qualquer caractere único (exceto nova linha '\n' ).
Expressão String Combinado?
.. a Nenhuma correspondência
ac 1 correspondência
acd 1 correspondência
acde 2 correspondências (contém 4 caracteres)


^ - Acento circunflexo

O símbolo de acento circunflexo ^ é usado para verificar se uma string começa com um determinado personagem.
Expressão String Combinado?
^a a 1 correspondência
abc 1 correspondência
bac Nenhuma correspondência
^ab abc 1 correspondência
acb Nenhuma correspondência (começa com a mas não seguido por b )


$ - Dólar

O símbolo do dólar $ é usado para verificar se uma string termina com um determinado personagem.
Expressão String Combinado?
a$ a 1 correspondência
formula 1 correspondência
cab Nenhuma correspondência


* - Estrela

O símbolo de estrela * corresponde a zero ou mais ocorrências do padrão que lhe resta.
Expressão String Combinado?
ma*n mn 1 correspondência
man 1 correspondência
maaan 1 correspondência
main Nenhuma correspondência (a não é seguido por n )
woman 1 correspondência


+ - Mais

O símbolo de mais + corresponde a uma ou mais ocorrências do padrão que lhe resta.
Expressão String Combinado?
ma+n mn Nenhuma correspondência (sem a personagem)
man 1 correspondência
maaan 1 correspondência
main Sem correspondência (a não é seguido por n)
woman 1 correspondência


? - Ponto de interrogação

O símbolo de ponto de interrogação ? corresponde a zero ou uma ocorrência do padrão que lhe resta.
Expressão String Combinado?
ma?n mn 1 correspondência
man 1 correspondência
maaan Nenhuma correspondência (mais de um a personagem)
main Sem correspondência (a não é seguido por n)
woman 1 correspondência


{} - Aparelhos

Considere este código:{n,m} . Isso significa que pelo menos n , e no máximo m repetições do padrão deixado para ele.
Expressão String Combinado?
a{2,3} abc dat Nenhuma correspondência
abc daat 1 correspondência (em daat )
aabc daaat 2 correspondências (em aabc e daaat )
aabc daaaat 2 correspondências (em aabc e daaaat )

Vamos tentar mais um exemplo. Este RegEx [0-9]{2, 4} corresponde a pelo menos 2 dígitos, mas não mais de 4 dígitos
Expressão String Combinado?
[0-9]{2,4} ab123csde 1 correspondência (correspondência em ab123csde )
12 and 345673 3 correspondências (12 , 3456 , 73 )
1 and 2 Nenhuma correspondência


| - Alternância

Barra vertical | é usado para alternância (or operador).
Expressão String Combinado?
a|b cde Nenhuma correspondência
ade 1 correspondência (correspondência em ade )
acdbea 3 correspondências (em acdbea )

Aqui, a|b corresponde a qualquer string que contenha a ou b


() - Grupo

Parênteses () é usado para agrupar subpadrões. Por exemplo, (a|b|c)xz corresponde a qualquer string que corresponda a a ou b ou c seguido por xz
Expressão String Combinado?
(a|b|c)xz ab xz Nenhuma correspondência
abxz 1 correspondência (correspondência em abxz )
axz cabxz 2 correspondências (em axzbc cabxz )


\ - Barra invertida

Reação \ é usado para escapar de vários caracteres, incluindo todos os metacaracteres. Por exemplo,

\$a corresponde se uma string contiver $ seguido por a . Aqui, $ não é interpretado por um mecanismo RegEx de uma maneira especial.

Se você não tiver certeza se um caractere tem um significado especial ou não, você pode colocar \ na frente dele. Isso garante que o personagem não seja tratado de maneira especial.


Sequências especiais

Sequências especiais facilitam a escrita de padrões comumente usados. Aqui está uma lista de sequências especiais:



\A - Corresponde se os caracteres especificados estiverem no início de uma string.
Expressão String Combinado?
\Athe the sun Corresponder
In the sun Nenhuma correspondência


\b - Corresponde se os caracteres especificados estiverem no início ou no final de uma palavra.
Expressão String Combinado?
\bfoo football Corresponder
a football Corresponder
afootball Nenhuma correspondência
foo\b the foo Corresponder
the afoo test Corresponder
the afootest Nenhuma correspondência


\B - Oposto de \b . Corresponde se os caracteres especificados não no início ou no final de uma palavra.
Expressão String Combinado?
\Bfoo football Nenhuma correspondência
a football Nenhuma correspondência
afootball Corresponder
foo\B the foo Nenhuma correspondência
the afoo test Nenhuma correspondência
the afootest Corresponder


\d - Corresponde a qualquer dígito decimal. Equivalente a [0-9]
Expressão String Combinado?
\d 12abc3 3 correspondências (em 12abc3 )
Python Nenhuma correspondência


\D - Corresponde a qualquer dígito não decimal. Equivalente a [^0-9]
Expressão String Combinado?
\D 1ab34"50 3 correspondências (em 1ab34"50 )
1345 Nenhuma correspondência


\s - Corresponde onde uma string contém qualquer caractere de espaço em branco. Equivalente a [ \t\n\r\f\v] .
Expressão String Combinado?
\s Python RegEx 1 correspondência
PythonRegEx Nenhuma correspondência


\S - Corresponde onde uma string contém qualquer caractere que não seja espaço em branco. Equivalente a [^ \t\n\r\f\v] .
Expressão String Combinado?
\S a b 2 correspondências (em a b )
    Nenhuma correspondência


\w - Corresponde a qualquer caractere alfanumérico (dígitos e alfabetos). Equivalente a [a-zA-Z0-9_] . A propósito, sublinhe _ também é considerado um caractere alfanumérico.
Expressão String Combinado?
\w 12&": ;c 3 correspondências (em 12&": ;c )
%"> ! Nenhuma correspondência


\W - Corresponde a qualquer caractere não alfanumérico. Equivalente a [^a-zA-Z0-9_]
Expressão String Combinado?
\W 1a2%c 1 correspondência (em 1a2%c )
Python Nenhuma correspondência


\Z - Corresponde se os caracteres especificados estiverem no final de uma string.
Expressão String Combinado?
Python\Z I like Python 1 correspondência
I like Python Programming Nenhuma correspondência
Python is fun. Nenhuma correspondência


Dica: Para construir e testar expressões regulares, você pode usar ferramentas de teste RegEx, como regex101. Esta ferramenta não só ajuda na criação de expressões regulares, mas também ajuda a aprender.

Agora que você entende o básico do RegEx, vamos discutir como usar o RegEx em seu código Python.

Python RegEx


Python tem um módulo chamado re trabalhar com expressões regulares. Para usá-lo, precisamos importar o módulo.
import re

O módulo define várias funções e constantes para trabalhar com RegEx.

re.findall()


O re.findall() O método retorna uma lista de strings contendo todas as correspondências.

Exemplo 1:re.findall()


# Program to extract numbers from a string

import re

string = 'hello 12 hi 89. Howdy 34'
pattern = '\d+'

result = re.findall(pattern, string) 
print(result)

# Output: ['12', '89', '34']

Se o padrão não for encontrado, re.findall() retorna uma lista vazia.

re.split()


O re.split O método divide a string onde há uma correspondência e retorna uma lista de strings onde as divisões ocorreram.

Exemplo 2:re.split()


import re

string = 'Twelve:12 Eighty nine:89.'
pattern = '\d+'

result = re.split(pattern, string) 
print(result)

# Output: ['Twelve:', ' Eighty nine:', '.']

Se o padrão não for encontrado, re.split() retorna uma lista contendo a string original.


Você pode passar em maxsplit argumento para o re.split() método. É o número máximo de divisões que ocorrerão.

import re

string = 'Twelve:12 Eighty nine:89 Nine:9.'
pattern = '\d+'

# maxsplit = 1
# split only at the first occurrence
result = re.split(pattern, string, 1) 
print(result)

# Output: ['Twelve:', ' Eighty nine:89 Nine:9.']

A propósito, o valor padrão de maxsplit é 0; significando todas as divisões possíveis.

re.sub()


A sintaxe de re.sub() é:
re.sub(pattern, replace, string)

O método retorna uma string onde as ocorrências correspondentes são substituídas pelo conteúdo de replace variável.

Exemplo 3:re.sub()


# Program to remove all whitespaces
import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'

# empty string
replace = ''

new_string = re.sub(pattern, replace, string) 
print(new_string)

# Output: abc12de23f456

Se o padrão não for encontrado, re.sub() retorna a string original.


Você pode passar count como um quarto parâmetro para o re.sub() método. Se omitido, resulta em 0. Isso substituirá todas as ocorrências.

import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'
replace = ''

new_string = re.sub(r'\s+', replace, string, 1) 
print(new_string)

# Output:
# abc12de 23
# f45 6

re.subn()


O re.subn() é semelhante a re.sub() exceto que retorna uma tupla de 2 itens contendo a nova string e o número de substituições feitas.

Exemplo 4:re.subn()


# Program to remove all whitespaces
import re

# multiline string
string = 'abc 12\
de 23 \n f45 6'

# matches all whitespace characters
pattern = '\s+'

# empty string
replace = ''

new_string = re.subn(pattern, replace, string) 
print(new_string)

# Output: ('abc12de23f456', 4)

re.search()


O re.search() O método recebe dois argumentos:um padrão e uma string. O método procura o primeiro local onde o padrão RegEx produz uma correspondência com a string.

Se a pesquisa for bem-sucedida, re.search() retorna um objeto de correspondência; se não, ele retorna None .
match = re.search(pattern, str)

Exemplo 5:re.search()


import re

string = "Python is fun"

# check if 'Python' is at the beginning
match = re.search('\APython', string)

if match:
  print("pattern found inside the string")
else:
  print("pattern not found")  

# Output: pattern found inside the string

Aqui, combinar contém um objeto de correspondência.

Objeto de correspondência


Você pode obter métodos e atributos de um objeto de correspondência usando a função dir().

Alguns dos métodos e atributos comumente usados ​​de objetos de correspondência são:

match.group()


O group() O método retorna a parte da string onde há uma correspondência.

Exemplo 6:objeto de correspondência


import re

string = '39801 356, 2102 1111'

# Three digit number followed by space followed by two digit number
pattern = '(\d{3}) (\d{2})'

# match variable contains a Match object.
match = re.search(pattern, string) 

if match:
  print(match.group())
else:
  print("pattern not found")

# Output: 801 35

Aqui, combinar variável contém um objeto de correspondência.

Nosso padrão (\d{3}) (\d{2}) tem dois subgrupos (\d{3}) e (\d{2}) . Você pode obter a parte da string desses subgrupos entre parênteses. Veja como:
>>> match.group(1)
'801'

>>> match.group(2)
'35'
>>> match.group(1, 2)
('801', '35')

>>> match.groups()
('801', '35')

match.start(), match.end() e match.span()


O start() A função retorna o índice do início da substring correspondente. Da mesma forma, end() retorna o índice final da substring correspondente.
>>> match.start()
2
>>> match.end()
8

O span() A função retorna uma tupla contendo o índice inicial e final da parte correspondente.
>>> match.span()
(2, 8)

match.re e match.string


O re atributo de um objeto correspondente retorna um objeto de expressão regular. Da mesma forma, string atributo retorna a string passada.
>>> match.re
re.compile('(\\d{3}) (\\d{2})')

>>> match.string
'39801 356, 2102 1111'


Cobrimos todos os métodos comumente usados ​​definidos no re módulo. Se você quiser saber mais, visite o módulo Python 3 re.

Usando o prefixo r antes de RegEx


Quando r ou R prefix é usado antes de uma expressão regular, significa string bruta. Por exemplo, '\n' é uma nova linha enquanto r'\n' significa dois caracteres:uma barra invertida \ seguido por n .

Reação \ é usado para escapar de vários caracteres, incluindo todos os metacaracteres. No entanto, usando r prefixo faz \ tratar como um personagem normal.

Exemplo 7:string bruta usando o prefixo r


import re

string = '\n and \r are escape sequences.'

result = re.findall(r'[\n\r]', string) 
print(result)

# Output: ['\n', '\r']

python

  1. Palavras-chave e identificadores do Python
  2. Tipos de dados Python
  3. Operadores Python
  4. Argumentos da função Python
  5. Dicionário Python
  6. Iteradores Python
  7. Fechamentos Python
  8. Data e hora do Python
  9. Módulo de tempo Python
  10. Python dormir()