Extraire des valeurs à virgule flottante à partir de chaînes avec des expressions régulières
Considérez la tâche consistant à extraire une valeur double d'une chaîne. Pour y parvenir à l'aide d'une expression régulière, les étapes suivantes sont impliquées :
Construire l'expression régulière :
<code class="python">import re pattr = re.compile(???) x = pattr.match("4.5")</code>
Utilisez des expressions régulières compatibles Perl :
Une expression rationnelle appropriée de la documentation Perl pour extraire des valeurs à virgule flottante est :
<code class="python">re_float = re.compile("""(?x) ^ [+-]?\ * # an optional sign and space ( # integers or f.p. mantissas \d+ # start with a ... ( # ? takes care of integers \.\d* # mantissa a.b or a. )? |\.\d+ # mantissa .b ) ([eE][+-]?\d+)? # optionally match an exponent $""")</code>
Rechercher et récupérer des correspondances :
Pour extraire la valeur double, appliquez l'expression rationnelle compilée à la chaîne souhaitée :
<code class="python">m = re_float.match("4.5") print(m.group(0))</code>
Cela affichera :
4.5
Extraire plusieurs valeurs d'une chaîne :
Pour extraire plusieurs valeurs à virgule flottante d'une chaîne plus grande, utilisez la méthode findall() :
<code class="python">s = """4.5 abc -4.5 abc - 4.5 abc + .1e10 abc . abc 1.01e-2 abc 1.01e-.2 abc 123 abc .123""" print(re.findall(r"[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?", s))</code>
Cela permettra renvoie une liste de valeurs extraites, notamment :
['4.5', '-4.5', '- 4.5', '+ .1e10', ' 1.01e-2', ' 1.01', '-.2', ' 123', ' .123']
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!