2011-11-20 27 views
17

In Python, voglio estrarre solo i caratteri da una stringa.Estrazione di solo caratteri da una stringa in Python

Considerate ho la seguente stringa,

input = "{('players',): 24, ('year',): 28, ('money',): 19, ('ipod',): 36, ('case',): 23, ('mini',): 46}" 

voglio il risultato come,

output = "players year money ipod case mini" 

ho cercato di dividere considerando solo gli alfabeti,

word1 = st.split("[a-zA-Z]+") 

Ma la scissione non sta succedendo.

+3

Split fa l'opposto di quello che stai cercando di fare - rimuove delimi ters, e hai specificato '[a-zA-Z] +' come delimitatore, quindi viene rimosso. – Nicole

+3

Da dove prendi questo stupido formato dati? –

+1

Sebbene tu abbia scelto la risposta di chown, dai un'occhiata a sbery2A qui sotto. Dove prendi questi dati di input. Sembra un dizionario Python, tranne che è quotato per renderlo una stringa. –

risposta

27

Si potrebbe fare con re, ma il metodo stringa divisa non prende una regex, ci vuole una stringa.

Heres un modo per farlo con re:

import re 
word1 = " ".join(re.findall("[a-zA-Z]+", st)) 
+0

io funzioni perfetly, grazie =) – marcelosalloum

2

Che ne dici di fare questo?

>>> import ast 
>>> " ".join([k[0] for k in ast.literal_eval("{('players',): 24, ('year',): 28, ('money',): 19, ('ipod',): 36, ('case',): 23, ('mini',): 46}").keys()]) 
'case mini year money ipod players' 
+1

Perché cambia l'ordine delle chiavi? Su cosa si basa? (non valore, non in ordine alfabetico ...)? – Nicole

+2

valutare le stringhe per analizzarle? costoso e pericoloso. –

+7

Non sicuro? Capisci cosa 'ast.literal_eval()' fa? –

4

penso che si desidera che tutte le parole, non caratteri.

result = re.findall(r"(?i)\b[a-z]+\b", subject) 

Spiegazione:

" 
\b  # Assert position at a word boundary 
[a-z] # Match a single character in the range between “a” and “z” 
    +  # Between one and unlimited times, as many times as possible, giving back as needed (greedy) 
\b  # Assert position at a word boundary 
" 
+0

questa soluzione non accetta lettere maiuscole, vero? – juliomalegria

+2

@ julio.alegria Non vedi il (? I) di fronte alla regex? – FailedDev

+1

non sapeva nulla di '(?i) ', è per questo che ho chiesto :) – juliomalegria

5

string.split() non prende le espressioni regolari. Volete qualcosa di simile:

re.split("[^a-zA-Z]*", "your string") 

e per ottenere una stringa:

" ".join(re.split("[^a-zA-Z]*", "your string")) 
1

Oppure, se si desidera che tutti i personaggi indipendentemente da parole o spazi vuoti

a = "Some57 996S/tr::--!!ing" 
    q = "" 
    for i in a: 
     if i.isalpha(): 
      q = "".join([q,i]) 

stampa q 'SomeString '

Problemi correlati