Quantificateur
Allez, continuez à approfondir votre compréhension des expressions régulières. Dans cette partie, comprenons les quantificateurs et pourquoi nous utilisons des quantificateurs. Pensez-y. Si vous souhaitez faire correspondre des dizaines ou des centaines de caractères, devez-vous les écrire un par. un, donc seuls les quantificateurs apparaissent.
Le lexique des quantificateurs est : {min,max}. min et max sont tous deux des entiers non négatifs. Si la virgule est présente et que max est omis, alors max n'a pas de limite. Si la virgule et le maximum sont omis, répétez min fois. Par exemple, b[1-9][0-9]{3}b correspond aux nombres compris entre 1 000 et 9999 (« b » représente les limites des mots), tandis que b[1-9][0-9]{ 2,4} b, correspond à un nombre compris entre 100 et 99999.
Regardons un exemple ci-dessous pour faire correspondre 4 à 7 lettres dans la chaîne en anglais
import re a = 'java*&39android##@@python' # 数量词 findall = re.findall('[a-z]{4,7}', a) print(findall)
Résultat de sortie :
['java', 'android', 'python']
Notez qu'il y a ici des gourmands et des non-gourmands. Jetons donc d'abord un coup d'œil aux concepts associés :
Mode gourmand : Sa caractéristique est de lire la chaîne entière d'un coup. Si elle ne correspond pas, crachez le caractère le plus à droite puis faites la correspondance jusqu'à ce qu'une chaîne ou une chaîne correspondante soit trouvée. jusqu'à ce que la longueur soit 0. Son but est de lire autant de caractères que possible, il revient donc immédiatement lorsque la première correspondance est lue.
Mode paresseux : Sa caractéristique est qu'il commence par le côté gauche de la chaîne et essaie de faire correspondre sans lire les caractères de la chaîne. S'il échoue, il lira un caractère supplémentaire et fera une correspondance à nouveau. match est trouvé. La chaîne correspondante, puis correspond à nouveau jusqu'à la fin de la chaîne.
L'exemple ci-dessus est gourmand. Et si nous voulons utiliser un mode non gourmand, qui est le mode paresseux ?
Si vous souhaitez utiliser non gourmand, ajoutez un ?, l'exemple ci-dessus est modifié comme suit :
import re a = 'java*&39android##@@python' # 贪婪与非贪婪 re_findall = re.findall('[a-z]{4,7}?', a) print(re_findall)
Le résultat de sortie est le suivant :
['java', 'andr', 'pyth']
Comme le montrent les résultats de sortie, Android n'imprime que sauf andr , Python n'imprime que sauf pyth, car le mode Lazy est utilisé ici.
Bien sûr, il existe quelques caractères spéciaux qui peuvent aussi exprimer des quantités, tels que :
?:告诉引擎匹配前导字符 0 次或 1 次 +:告诉引擎匹配前导字符 1 次或多次 *:告诉引擎匹配前导字符 0 次或多次
Pour résumer les points de connaissances dans cette partie, c'est le tableau suivant :
Cupidité | Paresseux | Décrivez |
? | ? ? | Zéro ou une occurrence, équivalent à {0,1} |
+ | + ? | apparaît une ou plusieurs fois, ce qui équivaut à {1,} |
* | * ? | apparaît zéro ou plusieurs fois, ce qui équivaut à {0,} |
{n} | {n} ? | se produit exactement n fois |
{n,m} | {n,m} ? | Au moins n branches apparaissent plus de m fois |
{n,} | {n,} ? | Au moins n fois |