2011-11-20 17 views
17

में स्ट्रिंग से केवल वर्ण निकालने के लिए पायथन में, मैं केवल स्ट्रिंग से वर्ण निकालना चाहता हूं।पायथन

, पर विचार करें मैं निम्नलिखित स्ट्रिंग है,

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

मैं के रूप में परिणाम चाहते हैं,

output = "players year money ipod case mini" 

मैं केवल अक्षर पर विचार विभाजित करने की कोशिश की

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

लेकिन विभाजन नहीं हो रहा है

+3

स्प्लिट आप जो करने की कोशिश कर रहे हैं उसके विपरीत करता है - यह delimi को हटा देता है ters, और आपने delimiter के रूप में '[a-zA-Z] +' निर्दिष्ट किया है, इसलिए इसे हटा दिया गया है। – Nicole

+3

आपको यह मूर्ख डेटा प्रारूप कहां से मिल रहा है? –

+1

यद्यपि आपने चाउन का जवाब चुना है, नीचे नीचे sbery2A पर एक नज़र डालें। आपको यह इनपुट डेटा कहां मिलता है। यह एक अजगर शब्दकोश की तरह दिखता है सिवाय इसके कि इसे एक स्ट्रिंग बनाने के लिए उद्धृत किया गया है। –

उत्तर

27

आप फिर से साथ यह कर सकता है, लेकिन does not एक regex ले स्ट्रिंग विभाजन विधि, यह एक स्ट्रिंग लेता है।

यहाँ एक तरह से फिर से साथ यह करने के लिए:

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

से आया था, मैं perfetcly काम करता हूं, धन्यवाद =) – marcelosalloum

2

ऐसा करने के बारे में क्या?

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

यह चाबियों के क्रम को क्यों बदलता है? क्या उस पर आधारित है? (मूल्य नहीं, वर्णानुक्रम नहीं ...)? – Nicole

+2

उन्हें पार्स करने के लिए स्ट्रिंग का मूल्यांकन? महंगा और असुरक्षित। –

+7

असुरक्षित? क्या आप समझते हैं कि 'ast.literal_eval() 'क्या करता है? –

4

मुझे लगता है कि आप सभी शब्दों, नहीं वर्ण चाहते हैं।

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

स्पष्टीकरण:

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

यह समाधान अपरकेस अक्षरों को स्वीकार नहीं करता है, है ना? – juliomalegria

+2

@ julio.alegria क्या आप रेगेक्स के सामने (? I) नहीं देखते हैं? – FailedDev

+1

को '(?i) ', यही कारण है कि मैंने पूछा :) – juliomalegria

5

string.split() नियमित अभिव्यक्ति नहीं लेता है। आप चाहते हैं कुछ की तरह:

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

और एक स्ट्रिंग प्राप्त करने के लिए:

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

या आप सभी पात्रों शब्दों या खाली स्थान

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

प्रिंट क्ष 'की परवाह किए बिना चाहते हैं SomeString '