Estrai un numero dopo una particolare stringa

-1

Ho una stringa series[Episode 37]-03th_July_2010-YouTube e voglio estrarre il numero che viene immediatamente dopo Episode (es: 37 dall'episodio 37 )the position of Episodio 37 'potrebbe non essere corretto nella stringa. Ho provato:

def extract_episode_num(self,epiname):
    self.epiname = epiname
    try:
        self.temp = ((self.epiname.split('['))[1]).split(']')[0]    #extracting the Episode xx from episode name
    except IndexError:                                              #to raise exception if episode name is not in format
        print'wrong file name or Episodes have finished'
        raise
    else:
        return re.findall('\d+',self.temp)  

ma il codice dipende dalle parentesi [] . Come posso migliorare il codice?

    
posta NGB 17.10.2016 - 09:46
fonte

2 risposte

3

Espressioni regolari in soccorso!

Vedo che sei già sulla strada giusta, usando un'espressione regolare. Ma potresti provare a usare un'espressione regolare con una cattura per catturare le cifre seguendo la stringa "Episodio".

Ecco un piccolo esempio per iniziare:

import re
m = re.search('Episode (\d+)', 'series[Episode 37]-03th_July_2010-YouTube', re.IGNORECASE)
m.group(1)

L'ultima istruzione, m.group(1) , restituisce il contenuto del primo gruppo (cosa c'è tra parentesi nell'espressione regolare). In questo caso sarà la stringa "37", ovvero le cifre che seguono la stringa "Episodio".

Notate anche che sto usando il flag IGNORECASE, quindi funzionerà indipendentemente dall'involucro della stringa "Episode". Quindi "episodio" e persino "ePISODE" funzioneranno anche.

    
risposta data 17.10.2016 - 10:17
fonte
1

Tipo di ampio, che tira da un file di testo, ma lo farà per molte applicazioni di ottenere sia interi che float fuori dalle stringhe.

import re


# a function to pull the numbers from many lists of strings
def func(a, z, c):
    # -- Read .txt -- #
    filename = 'commaseperated.txt'
    f1 = open(filename, 'r')  # open the file for reading
    data = f1.readlines()  # read the entire file as a list of strings
    f1.close()
    #
    for line in data:
        cells = line.strip().split(',')
        # empty string
        b = ""
        # range through cells of from a text file split by commas
        for i in range(a, len(cells[z:c])+a):
            # no commas in the cells so make dummy commas for new string
            b += cells[i] + ','
        # find all the numbers
        z = re.findall(r'\d+(?:\.\d+)?', b)
        # return a list of floated values from the text string
        return [float(z[s]) for s in range(len(z))]

Dove commaseperated.txt ha una riga simile alla seguente: (0, 1, 2.4), 1, 5, 8, 99.7, 0.1), (,) ()! @! #, 9

Output: [0, 1, 2.4, 1, 5, 8, 99.7, 0.1, 9]
    
risposta data 27.11.2018 - 02:44
fonte

Leggi altre domande sui tag