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

DDD
Libérer: 2024-10-21 12:13:33
original
890 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!