0
votes

Comment tirer une valeur numérique (de longueur variable) de la même position dans une chaîne?

Je suis assez nouveau à Python et je ne trouve pas tout à fait de trouver le libellé de la comprendre via le googling ou de la recherche ici. Je tente d'écrire une ligne de code dans Python pour extraire un certain nombre d'une ligne de sujet de messagerie. Je lis les données du courrier électronique dans un fichier de données PANDA (colonnes séparées par sujet, destinataire, expéditeur, etc.). Le nombre sera toujours dans la même position mais variera de longueur (minimalement 4, maximum 9).

Par exemple: P>

import re
regexpression= re.search('Manager: (.*) -', df.subject[0])
result = regexpression.group(1).rsplit(' ', 1)[1]
print (f'{result}')


2 commentaires

Avez-vous essayé d'utiliser Expressions régulières ?


Je me demande si la scission de la fin pourrait fonctionner pour vous: your_string.rsplit ('-', 2) [- 2] .Rpartition ('') [2] ... ce qui pourrait mapper à quelque chose comme : DF ['Sujet']. str.rsplit ('-', 2, expand = true) [1] .str.rpartition ('') [2] Pour appliquer à votre colonne Dataframe. ..


5 Réponses :


0
votes
stringlist = string.split('-')
affectedlist = stringlist[-4].split()
anydigitnumber = affectedlist[-1]
print (anydigitnumber)
#012345

0 commentaires

0
votes

Utilisez isdigit () xxx

L'utilisation de -1 provient de l'hypothèse qu'il est toujours dans la même position

si vous Voulez-vous que le premier zéro, une chaîne fera: xxx


1 commentaires

Cela semble fonctionner comme prévu. Bien que si j'ai un numéro qui mène avec un zéro, cela le tombe. J'aurais besoin du zéro.



0
votes
import re
x= 'No, I will submit changes: Action Required: RIC CR 2.6.7.1-5 - Active Confirmation - Affected: Doe, John 012345 - Date Sent: 01-02-2019'
numbers=re.findall("(.*?)-",x)
for i in range(len(numbers[3])):
    if numbers[3][i].isdigit() is True:
        print (numbers[3][i:])
        break
if the pattern is consistent with the example you provided (searching for "-" to split the text then search for you numbers)

0 commentaires

0
votes

Vous pouvez séparer par un tiret entouré par des espaces (par opposition à juste un tableau de bord), puis il est plus facile de localiser ce que vous recherchez, à savoir le dernier "mot" du premier "élément" du premier "élément" :

number = int(affected.split()[-1])


0 commentaires

0
votes
 >>> import re    
 >>> s="""Email Subject Line: 'No, I will submit changes: Action    Required: RIC
... CR 2.6.7.1-5 - Active Confirmation - Affected: Doe, John 012345 - Date
... Sent: 01-02-2019'"""

>>> m=re.search(r'\b[0-9]{4,9}\b',s)
>>> m.group(0)
'012345'
use  \b for word boundaries to avoid matching something by accident

0 commentaires