2017-10-21 37 views
0

J'ai une chaîne qui prend le format suivant:caractères génériques dans une chaîne et divise la chaîne après eux en Python

TEST 1 EXAMPLE 1 BLAHBLAH 

Le numéro 1 peut être remplacé par un nombre et « blahblah » par une chaîne , par exemple:

TEST 2 EXAMPLE 99 HELLOWORLD 

ce que je voudrais faire est d'abord, vérifiez si la chaîne (que je reçois comme « données ») commence par TEST * EXAMPLE * puis, il diviser je part donc une nouvelle chaîne de seulement ce qui suit. Voici ce que j'ai essayé:

import fnmatch 
filtered = fnmatch.filter(data, 'TEST ? EXAMPLE ?') 
if filtered != "": 
    str = filtered.split("EXAMPLE ",1)[1] 
+1

Regardez le module re – MegaIng

+0

Quelle est la question? – arsho

Répondre

0

fnmatch? matchs de un seul caractère unique. Dans votre cas, comme vous l'avez montré, les chiffres peuvent être des chiffres multiples, par ex. 99, vous devriez donc utiliser * à la place. Ce qui suit a fonctionné pour moi:

import fnmatch 
data = "TEST 2 EXAMPLE 99 HELLOWORLD" 
if fnmatch.fnmatch(data, 'TEST * EXAMPLE *'): 
    // do what you want with the data 

Reference

Mais Je suggère d'utiliser regex à la place, de la manière suivante:

import re 
m = re.compile("^TEST \d+ EXAMPLE \d+.*") 
data = "TEST 2 EXAMPLE 99 HELLOWORLD TRY TRY" 
if m.search(data): 
    print(' '.join(data.split(' ')[4:])) // or whatever you want to do 

Je pense que regex est un outil plus puissant. Vous pouvez en lire plus à ce sujet here

0

Votre exemple fonctionne presque:

import fnmatch 
data = 'TEST 1 EXAMPLE 1 BLAHBLAH' 
matches = fnmatch.fnmatchcase(data, 'TEST * EXAMPLE *') 
if matches: 
    rest = data.split('EXAMPLE ', 1)[1] 
    print(rest) 

Notez que fnmatch.filter() attend une liste comme premier argument, pas une chaîne, et il retourne aussi une liste. En outre, ? ne correspond qu'à un seul caractère, vous devez donc utiliser * à la place.

Je serais probablement utiliser une expression régulière si:

import re 
data = 'TEST 1 EXAMPLE 1 BLAHBLAH' 
match = re.search(r'^TEST \d+ EXAMPLE (\d+ \w+)$', data) 
if match: 
    rest = match.groups()[0] 
    print(rest)