Maison >développement back-end >Tutoriel Python >Comment extraire des valeurs à virgule flottante double précision à partir de chaînes avec Regex ?

Comment extraire des valeurs à virgule flottante double précision à partir de chaînes avec Regex ?

DDD
DDDoriginal
2024-10-21 12:13:33992parcourir

How to Extract Double Precision Floating-Point Values from Strings with Regex?

Extraire des valeurs à virgule flottante double précision à partir de chaînes avec des expressions régulières

Dans cet article, nous explorerons une question souvent rencontrée en programmation : comment extraire des valeurs flottantes double précision -pointez les nombres à partir d'une chaîne de texte à l'aide du module Python re pour les expressions régulières.

Modèle Regex pour double précision

Pour faire correspondre les valeurs à virgule flottante double précision, nous pouvons utiliser une expression régulière qui capture signes facultatifs, parties entières ou fractionnaires et exposant facultatif. Le modèle suivant est un exemple de la documentation Perl :

<code class="python">re_float = re.compile("""(?x)
   ^
      [+-]?\ *      # optional sign and space
      (             # integer or fractional mantissa:
          \d+       # start out with digits...
          (
              \.\d* # mantissa of the form a.b or a.
          )?        # ? for integers of the form a
         |\.\d+     # mantissa of the form .b
      )
      ([eE][+-]?\d+)?  # optional exponent
   $""")</code>

Correspondance et extraction

Pour faire correspondre une valeur en double précision avec ce modèle, nous pouvons utiliser la méthode match sur une expression régulière compilée object :

<code class="python">m = re_float.match("4.5")
print(m.group(0))  # prints 4.5</code>

Cela extrait la partie de la chaîne qui correspond au modèle, dans ce cas, la chaîne entière.

Extraction de plusieurs valeurs

Si nous avons un chaîne plus grande contenant plusieurs valeurs à virgule flottante double précision, nous pouvons utiliser la méthode findall pour extraire toutes les valeurs correspondantes :

<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))
# prints ['4.5', '-4.5', '- 4.5', '+ .1e10', ' 1.01e-2',
#     '       1.01', '-.2', ' 123', ' .123']</code>

Ce modèle correspond à n'importe quelle valeur à virgule flottante double précision, quels que soient les espaces ou le texte environnant, et l'extrait sous forme de liste de chaînes.

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