. = n'importe quel caractère * = apparaît 0 fois ou plus, équivalent à {0,} ? = prend celui avec le moins de correspondances précédentes, équivalent à {0,1}
Pour résumer, cela signifie "n'importe quel caractère apparaît 0 fois", donc il n'y a rien.
Pour faire correspondre cats, vous devez utiliser l'espace après cats, r'(.*?) '.
Ma compréhension personnelle est que .*? correspond à ^, qui est la position de départ. Dans les expressions régulières, la position peut également être mise en correspondance, comme :
.
In [1]: s = 'a'
In [2]: re.sub(r'^','b',s)
Out[2]: 'ba'
Cet exemple remplace ^, et il en va de même pour $, donc votre .*? correspond directement à ^. PS : lorsque vous utilisez des expressions régulières, surtout s'il y a beaucoup de contenu textuel, il il n'est pas recommandé d'utiliser .* mais [sS]* ou [dD]* etc.
Voici la différence entre la correspondance gourmande d'expression régulière et la correspondance non gourmande :
Mode gourmand : Lorsque la correspondance est possible, faites correspondre le le plus long . L'expression ne se termine pas par ?.
Mode non gourmand : Lorsque la correspondance est possible, faites correspondre le le plus court . Les expressions se terminent par ?.
Par exemple, la chaîne abcabcabc, lorsque je veux faire correspondre une chaîne commençant par a et se terminant par c, il y a trois correspondances : abc, abcabc et abcabcabc, parmi lesquelles le abcabcabc le plus long peut être associé à a.*c, tandis que le abc le plus court peut être associé à a.*?c.
>>> import re
>>> line = "abcabcabc"
>>> m = re.match(r'a.*c', line)
>>> m.group()
'abcabcabc'
>>> m = re.match(r'a.*?c', line)
>>> m.group()
'abc'
Pourquoi le résultat est-il vide ? Ne devrait-il pas s'agir de chats ?
Comme .* est un modèle gourmand, il correspondra à la chaîne la plus longue dans laquelle chaque caractère est n'importe quel caractère (.), c'est-à-dire une chaîne composée de tous les caractères saisis. Et .*? est un mode non gourmand, qui correspondra à la chaîne la plus courte dans laquelle chaque caractère est n'importe quel caractère (.), c'est-à-dire une chaîne vide.
Si vous souhaitez faire correspondre le mot chats, vous devez utiliser cats. Si vous souhaitez faire correspondre le premier mot de la chaîne d'entrée, vous devez utiliser w ou S .
Y a-t-il un caractère nul avant la chaîne par défaut ?
Non, mais dans les expressions régulières, vous pouvez utiliser ^ pour représenter la position de départ d'une chaîne et $ pour représenter la position de fin. Notez que ces deux caractères (^ et $) sont des symboles spécifiés par les règles de correspondance et sont utilisés dans la chaîne de règle que vous écrivez. Cela ne signifie pas que la chaîne à mettre en correspondance contient ces deux symboles.
.
= n'importe quel caractère*
= apparaît 0 fois ou plus, équivalent à{0,}
?
= prend celui avec le moins de correspondances précédentes, équivalent à{0,1}
Pour résumer, cela signifie "n'importe quel caractère apparaît 0 fois", donc il n'y a rien.
Pour faire correspondre
cats
, vous devez utiliser l'espace aprèscats
,r'(.*?) '
.Ma compréhension personnelle est que
..*?
correspond à^
, qui est la position de départ. Dans les expressions régulières, la position peut également être mise en correspondance, comme :Cet exemple remplace
^
, et il en va de même pour$
, donc votre.*?
correspond directement à^
.PS : lorsque vous utilisez des expressions régulières, surtout s'il y a beaucoup de contenu textuel, il il n'est pas recommandé d'utiliser
.*
mais[sS]*
ou[dD]*
etc.Voici la différence entre la correspondance gourmande d'expression régulière et la correspondance non gourmande :
Mode gourmand : Lorsque la correspondance est possible, faites correspondre le le plus long . L'expression ne se termine pas par
?
.Mode non gourmand : Lorsque la correspondance est possible, faites correspondre le le plus court . Les expressions se terminent par
?
.Par exemple, la chaîne
abcabcabc
, lorsque je veux faire correspondre une chaîne commençant para
et se terminant parc
, il y a trois correspondances :abc
,abcabc
etabcabcabc
, parmi lesquelles leabcabcabc
le plus long peut être associé àa.*c
, tandis que leabc
le plus court peut être associé àa.*?c
.Comme
.*
est un modèle gourmand, il correspondra à la chaîne la plus longue dans laquelle chaque caractère est n'importe quel caractère (.
), c'est-à-dire une chaîne composée de tous les caractères saisis. Et.*?
est un mode non gourmand, qui correspondra à la chaîne la plus courte dans laquelle chaque caractère est n'importe quel caractère (.
), c'est-à-dire une chaîne vide.Si vous souhaitez faire correspondre le mot chats, vous devez utiliser
cats
. Si vous souhaitez faire correspondre le premier mot de la chaîne d'entrée, vous devez utiliserw
ouS
.Non, mais dans les expressions régulières, vous pouvez utiliser
^
pour représenter la position de départ d'une chaîne et$
pour représenter la position de fin. Notez que ces deux caractères (^
et$
) sont des symboles spécifiés par les règles de correspondance et sont utilisés dans la chaîne de règle que vous écrivez. Cela ne signifie pas que la chaîne à mettre en correspondance contient ces deux symboles.
ne peut pas être mise en correspondance..
La correspondance des limites ne consomme pas les caractères de la chaîne correspondante, et il s'agit d'un mode non gourmand, donc la chaîne