Expressão regular - correspondência gananciosa

Em expressões regulares, a correspondência gananciosa refere-se à correspondência do maior número possível de caracteres, enquanto a correspondência não gananciosa (também chamada de correspondência lenta ou correspondência mínima) corresponde ao menor número de caracteres possível.

As expressões regulares são gananciosas por padrão, o que corresponde ao maior número possível de caracteres. Por exemplo, considere o seguinte exemplo:

import re

text = "Hello, my name is John. Nice to meet you, John."
pattern = r'my.*John'  # 贪婪匹配

match = re.search(pattern, text)
print(match.group())

Saída:

my name is John. Nice to meet you, John

Neste exemplo, a expressão regular my.*Johncorresponde a qualquer caractere após “meu” (incluindo espaços, sinais de pontuação, etc.) até o último “João”.

Se quisermos combinar a menor string depois de "my", ou seja, parar de combinar quando encontrarmos o primeiro "John", podemos usar símbolos de correspondência não gananciosos e ?mudar .*para .*?, como segue:

import re

text = "Hello, my name is John. Nice to meet you, John."
pattern = r'my.*?John'  # 非贪婪匹配

match = re.search(pattern, text)
print(match.group())

Saída:

my name is John

Desta vez, a expressão regular my.*?Johnusa correspondência não gananciosa, que corresponde apenas à menor string “meu nome é John” antes do primeiro “John” que atende à condição. Ao usar a correspondência não gananciosa, podemos controlar a expressão regular para corresponder ao menor número possível de caracteres, resultando em resultados mais precisos.

Acho que você gosta

Origin blog.csdn.net/m0_66238629/article/details/131603444
Recomendado
Clasificación