Maison  >  Article  >  développement back-end  >  Comment les expressions régulières peuvent-elles être utilisées pour extraire des valeurs à virgule flottante à partir de chaînes ?

Comment les expressions régulières peuvent-elles être utilisées pour extraire des valeurs à virgule flottante à partir de chaînes ?

DDD
DDDoriginal
2024-10-21 12:30:04252parcourir

How Can Regular Expressions Be Used to Extract Floating-Point Values from Strings?

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 :

  1. Construire l'expression régulière :

    <code class="python">import re
    
    pattr = re.compile(???)
    x = pattr.match("4.5")</code>
  2. 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>
  3. 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
  4. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn