-1
votes

Essayer d'extraire un certain nombre d'un texte

J'ai un texte similaire à ce format

"poids", "156,5", "hauteur", "6.3", "max", "146"

"poids", "136,3", "hauteur", "5,1", "max", "205" ........

Mon objectif est d'extraire ces chiffres dans des groupes de sorte que le poids dans la première colonne, la hauteur de la deuxième colonne, max dans la troisième etc.

Jusqu'à présent, j'ai réussi à obtenir le numéro de poids en utilisant ceci:

poids = re.findall (r '^ \ d * (\ d +. \ d +)', texte, ré.ignorecase | ré.multiline)

est-il possible d'analyser un numéro après un mot spécifique?

J'ai trouvé des questions similaires mais je leur ai essayé et ne travaille pas et ne peut penser à rien d'autre maintenant.


3 commentaires

Cela ressemble à un fichier CSV; Vous serez peut-être préférable de commencer par l'analyser comme un.


Ce n'est pas au format CVS, c'est ce que j'essaie de faire en réalité. Il a de multiples valeurs comme celle d'une rangée d'Excel et j'essaie simplement de créer un fichier CVS où le premier collumn serait le poids de la deuxième hauteur et ainsi de suite.


Il est certain que a l'air comme un fichier CSV, bien que peut-être pas avec les colonnes disposées comme vous le souhaitez. Mais je l'analyais toujours comme un; Il sera plus facile d'extraire les données que vous souhaitez et d'organiser la façon dont vous voulez.


3 Réponses :


-1
votes

Pensez à utiliser le paquet Pandas, pandas.read_csv () en particulier. Rend la vie facile.


0 commentaires

0
votes

Peut-être un moyen simple de le faire est de faire des itérations sur chaque élément de la liste et d'utiliser: xxx

Vous obtiendrez chaque numéro dans la ligne. Mais, vous pouvez peut-être utiliser une bibliothèque pour analyser votre dossier. Votre vie sera plus facile


0 commentaires

0
votes

Tout d'abord, je n'aime pas vraiment comment l'entrée est donnée. Scott est correct dans ses commentaires en ce que cela devrait être analysé d'une manière différente. Mais en train de mettre de côté, nous pouvons essayer de résoudre le problème comme cela: vous voulez probablement utiliser une apparence positive dans Regex. Dans votre situation, nous pouvons l'utiliser pour correspondre à une certaine partie de texte étant donné qu'un certain mot s'est produit juste avant. Vous pouvez inclure une apparence positive avec (? <= Texthere) suivi de votre chaîne de regex d'origine.

Si nous voulons trouver toutes les valeurs de poids: xxx

explication de la chaîne de recherche:

(? <= \ "Poids \ ",) est une veille positive et recherchera " poids ", (y compris les guillemets)

* \" * (\ d +. \ d +) trouvera entre 0 et des espaces illimités suivis d'un devis (la citation d'ouverture à votre numéro), puis correspond au nombre réel du groupe 1.


1 commentaires

merci beaucoup pour votre contribution que j'ai accidentellement essayé de re.findall (Weight \ d * (\ d + \ \ d +), texte 'et a fonctionné bien. Je suis d'accord que la façon dont les données sont données sont gâchées mais que était le point de la tâche que j'ai reçu.