Expression régulière pour les nombres entiers et les nombres entiers?
Je suis en train d'essayer de détecter tous les nombres entiers et les nombres entiers (parmi beaucoup d'autres choses) à partir d'une chaîne. Voici les expressions régulières, je suis actuellement en utilisant:
Nombres entiers: r"[0-9]+"
Entiers: r"[+,-]?[0-9]+"
Voici les questions:
- Les nombres entiers regex est de détecter les nombres négatifs ainsi, je ne peux pas. Comment puis-je résoudre ce problème? Si j'utilise un espace avant au début de la regex je ne reçois que des nombres positifs, mais puis-je obtenir un espace au début de ma sortie!
- Pour les nombres entiers, je tiens à détecter des nombres positifs avec le format
+[0-9]
mais les stocker sans le signe. - Pour les entiers, je voudrais stocker n'importe quel entier positif détecté par le signe, indépendamment de si elle est présente dans la chaîne d'origine.
Presque fini maintenant:
Une dernière chose, j'ai une chaîne qui dit "Ajoutez 10 et 15". Je veux stocker les entiers dans une liste. Je le fais à l'aide de la findall(). Tout en stockant le nombre est-il possible de stocker '10' '+10'
Ne sont pas des "nombres entiers" et "nombres entiers positifs sont la même chose? Je ne suis pas à comprendre comment vous permettrait de distinguer entre eux.
Les nombres entiers et les nombres entiers sont la même chose. Les entiers positifs sont des nombres naturels.
Que voulez-vous correspondre à la chaîne
Oh, à droite. Mais cela ne semble pas correspondre à l'OP d'utilisation (comme dans la question n ° 2)
Votre troisième souhait est impossible à réaliser avec la regex seul. Regexes ne peut comparer le texte qui est déjà présent dans la chaîne.
Les nombres entiers et les nombres entiers sont la même chose. Les entiers positifs sont des nombres naturels.
Que voulez-vous correspondre à la chaîne
"1.0 and 1e7"
? Les deux sont des nombres (mais considéré comme float
s par Python).Oh, à droite. Mais cela ne semble pas correspondre à l'OP d'utilisation (comme dans la question n ° 2)
Votre troisième souhait est impossible à réaliser avec la regex seul. Regexes ne peut comparer le texte qui est déjà présent dans la chaîne.
OriginalL'auteur Sahil Thapar | 2013-05-27
Vous devez vous connecter pour publier un commentaire.
Pour des entiers positifs, utiliser
Explication:
Pour la signature des entiers non signés, l'utilisation
Les frontières de mot
\b
sont indispensables pour faire en sorte que l'ensemble du numéro est mis en correspondance.Presque fini maintenant: Une dernière chose, j'ai une chaîne qui dit "Ajoutez 10 et 15". Je veux stocker les entiers dans une liste. Je le fais à l'aide de la findall(). Tout en stockant le nombre est-il possible de stocker '10' '+10'
Comme je l'ai mentionné dans mon commentaire à votre question, ce qui est impossible. Regexes ne peut comparer le texte qui est déjà là, il ne peut pas ajouter quoi que ce soit pour le match. Vous aurez besoin de le faire par programmation.
Cette échoue sur quelque chose comme
10.23
. Je pense que vous devez ajouter le.
vérifier au début aussi.En effet, merci pour le spotting. Édité.
OriginalL'auteur Tim Pietzcker
C'est presque ça.
Résultats:
Ou, vous pourriez utiliser "ou" pour obtenir le résultat réel dans une "plus agréable" façon:
Edit:
Selon votre question " est-il possible de stocker '10' '+10' " :
Ou en 1 ligne:
Voir mon edit.
Merci, j'ai juste besoin de savoir si il pourrait être fait lors de l'extraction de la regex et sans l'aide d'une fonction explicite. Merci de toute façon!
Vous pouvez voir la dernière ligne de ma réponse est sur une seule ligne.
OriginalL'auteur Inbar Rose