5
votes

jonction de la sortie de la recherche regex

  • J'ai une expression régulière qui recherche des nombres dans un fichier.
  • J'ai mis les résultats dans une liste
  • Le problème est qu'il imprime chaque résultat sur une nouvelle ligne pour chaque numéro qu'il trouve. il ignore également la liste que j'ai créée.

    Ce que je veux faire est d'avoir tous les nombres dans une seule liste. J'ai utilisé join () mais cela ne fonctionne pas.

    code:

    122
    34
    764
    

    sortie:

    def readfile():
        regex = re.compile('\d+')
    for num in regex.findall(open('/path/to/file').read()):
        lst = [num]
        jn = ''.join(lst)    
        print(jn)
    

0 commentaires

3 Réponses :


-1
votes

Utilisez les fonctions intégrées de liste pour ajouter de nouvelles valeurs.

def readfile():
regex = re.compile('\d+')
lst = []

for num in regex.findall(open('/path/to/file').read()):
    lst.append(num)

print(lst)


0 commentaires

3
votes

Ce qui ne va pas:

['123', '456', '789']   # list of found strings that are numbers
123, 456, 789
123, 456, 789
123, 456, 789

Corriger le problème :

Lecture de re.findall () vous montre, il renvoie déjà une liste.

Il n'y a pas (très) besoin d'utiliser un pour dessus pour l'imprimer.

Si vous voulez une liste - utilisez simplement la valeur de retour de re.findall () - si vous voulez l'imprimer, utilisez-en une des méthodes de Impression d'une liste int dans un une seule ligne python3 (plusieurs autres articles sur SO sur l'impression en une seule ligne):

import re

my_r = re.compile(r'\d+')                 # define pattern as raw-string

numbers = my_r.findall("123 456 789")     # get the list

print(numbers)

# different methods to print a list on one line
# adjust sep  / end to fit your needs
print( *numbers, sep=", ")                # print #1

for n in numbers[:-1]:                    # print #2
    print(n, end = ", ")
print(numbers[-1])

print(', '.join(numbers))                 # print #3

Sortie:

# this iterates the single numbers you find - one by one
for num in regex.findall(open('/path/to/file').read()):  
    lst = [num]                  # this puts one number back into a new list
    jn = ''.join(lst)            # this gets the number back out of the new list
    print(jn)                    # this prints one number

Doku:


Plus d'informations sur l'impression en une seule ligne:


0 commentaires

1
votes

Dans votre cas, regex.findall () renvoie une liste et vous vous joignez à chaque itération et l'imprimez.

C'est pourquoi vous rencontrez ce problème. p >

Vous pouvez essayer quelque chose comme ça.

nombres.txt

>>> import re
>>>
>>> regex = re.compile(r'\d+')
>>> lst = []
>>>
>>> for num in regex.findall(open('numbers.txt').read()):
...     lst.append(num)
...
>>> lst
['10', '20', '30', '56', '45']
>>>
>>> jn = ''.join(lst)
>>>
>>> jn
'1020305645'
>>>
>>> jn2 = '\n'.join(lst)
>>> jn2
'10\n20\n30\n56\n45'
>>>
>>> print(jn2)
10
20
30
56
45
>>>
>>> nums = [int(n) for n in lst]
>>> nums
[10, 20, 30, 56, 45]
>>>
>>> sum(nums)
161
>>>

déclarations:

Xy10Ab
Tiger20
Beta30Man
56
My45one


0 commentaires