2011-11-20 20 views
17

Python'da, yalnızca bir karakter dizesinden bir karakter çıkarmak istiyorum. Python'daki bir dizgeden yalnızca karakterleri ayıklama

,
output = "players year money ipod case mini" 

Ben sadece alfabe dikkate bölmek çalıştı,
input = "{('players',): 24, ('year',): 28, ('money',): 19, ('ipod',): 36, ('case',): 23, ('mini',): 46}" 

ben sonucu istiyorum, aşağıdaki dizeyi var

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

Ama bölünmüş düşünün olmuyor.

+3

Bölme, yapmaya çalıştığınız şeyin tersini yapar - bu, delimi kaldırır ters, ve [a-zA-Z] + ''yi sınırlayıcı olarak belirttiniz, bu yüzden kaldırılır. – Nicole

+3

Bu aptal veri formatını nereden alıyorsunuz? –

+1

Chown'un cevabını aldığınız halde, aşağıdaki sbery2A'ya bir göz atın. Bu girdi verilerini nereden alırsınız. Bir dize yapmak için alıntı yapıldığı dışında bir python sözlüğüne benziyor. –

cevap

27

Sen re ile yapabileceğini, ancak bir regex almak doesnt dize bölüşüm yöntemi, bir dize alır. re ile yapmak

İşte tek yön:

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

dan nereden geldiğini açıkladım, bu çok iyi olurdu, teşekkürler =) – marcelosalloum

2

Bunu yapmaktan ne haber?

>>> 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

Anahtarların sıralanması neden değişiyor? Neye dayanıyor? (değer değil, alfabetik değil ...)? – Nicole

+2

Dizeleri ayrıştırmak için değerlendiriyor musunuz? pahalı ve güvensiz. –

+7

Güvensiz? Ast.literal_eval() 'ın ne yaptığını biliyor musunuz? –

4

Hepinizin kelimeleri değil, karakterlerin istedikleriyle düşünüyorum.

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

Açıklama:

" 
\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

Bu çözüm büyük harf kabul etmiyor, değil mi? – juliomalegria

+2

@ julio.alegria (? I) ifadesinin önünde göremiyor musunuz? – FailedDev

+1

'hakkında hiçbir şey bilmiyor mu (?i) 'bu yüzden sordum :) – juliomalegria

5

string.split() düzenli ifadeler almaz. Sen istediğim bir şey gibi:

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

ve bir dize almak için:

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

Yoksa bakılmaksızın kelime veya boş alanlar

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

baskı q 'tüm karakterleri istiyorsanız SomeString '

İlgili konular