2016-08-26 2 views
1

Deshalb mag ich mit regex für die Jahreszeit suchen, die nicht von der Episode Nummer gefolgt sind, und ich habe die folgende Liste:Python Regex Anschlag auf Zeichenfolge

string = ['Fear the walking dead Season 2 Episode 9', 
'Veep Season 5', 
'Martine Season 2 (unknown number of episodes)', 
'New Girl Season 5 Episode 16'] 

ich diesen Code re.search('.+? Season [0-9]{1,2}', string, re.I) geschrieben habe, aber es scheint zu nehmen In Betracht kommt auch die Serie mit einer Episodennummer. Ich will es nur auf Veep Season 5

+1

Was ist das: 'Season' oder' Saison'? –

+0

Sorry, mein Schlechter. Ich werde es korrigieren – Prixeler

+0

[This] (https://regex101.com/) Website ist ideal für die Lösung all Ihrer Regex Bedürfnisse .... – Aaron

Antwort

3

Getreu zurückkehren würde ich mit ^ und $ empfehlen vom Anfang einer Zeile bis zum Ende entsprechen. So können Sie Ihre Regex ändern:

re.search('^(.+?Season\s[0-9]{1,2})$', string, re.I | re.M) 
2

Aus früheren Erfahrungen, würde ich vorschlagen, nicht nur diese mit Regex zu tun, aber ich habe schnell zusammen, um den folgenden Ausschnitt geworfen (nach dem no_episode_string alle diejenigen enthält ohne Episoden).

Für jede Saison werden wir gegen übereinstimmen „? [0-9] (. *)“, Die einfach alles bis einschließlich zum ersten Mal packt bis wir eine Reihe stoßen, und dann den Rest des Strings nehmen , die entweder leer ist (wenn keine Episodennummer vorhanden ist) oder nicht leer ist, wenn eine Episodennummer vorhanden ist.

So überprüfen wir nur, ob es leer ist oder nicht, und wenn es ist, fügen wir das Ganze zu no_episode_string hinzu.

import re 

string = ['Fear the walking dead Season 2 Episode 9', 
'Veep Season 5', 
'Martine Season 2 (unknown number of episodes)', 
'New Girl Seasoon 5 Episode 16'] 

no_episode_string = [] 

for season in string: 
    m = re.search('.*?[0-9]+(.*)', season) 
    if m.group(1) == "": 
     no_episode_string.append(m.group(0)) 
Verwandte Themen