2010-01-16 17 views
18

के बीच से स्ट्रिंग निकालें मैं उपयोगकर्ता द्वारा इनपुट किए गए पाठ से जानकारी निकालना चाहता हूं। कल्पना करें कि मैं निम्नलिखित इनपुट करता हूं:उद्धरण

SetVariables "a" "b" "c" 

मैं कोटेशन के पहले सेट के बीच जानकारी कैसे निकालूं? फिर दूसरा? फिर तीसरा?

उत्तर

26
>>> import re 
>>> re.findall('"([^"]*)"', 'SetVariables "a" "b" "c" ') 
['a', 'b', 'c'] 
+0

क्या लाइन के अंत में अर्ध कोलन आवश्यक है? – User

+0

@jspcal क्या यह सिंगल कोट्स के लिए भी काम करता है? –

9

Regular expressions इस पर अच्छा कर रहे हैं:

import re 
quoted = re.compile('"[^"]*"') 
for value in quoted.findall(userInputtedText): 
    print value 
20

आप उस पर एक string.split() कर सकता है। यदि स्ट्रिंग को उद्धरण चिह्नों (यानी उद्धरण चिह्नों की संख्या) के साथ ठीक से स्वरूपित किया गया है, तो सूची में प्रत्येक विषम मान में एक तत्व होगा जो उद्धरण चिह्नों के बीच है।

>>> s = 'SetVariables "a" "b" "c"'; 
>>> l = s.split('"')[1::2]; # the [1::2] is a slicing which extracts odd values 
>>> print l; 
['a', 'b', 'c'] 
>>> print l[2]; # to show you how to extract individual items from output 
c 

यह नियमित अभिव्यक्तियों की तुलना में एक तेज़ दृष्टिकोण भी है। टाइमिट मॉड्यूल के साथ, इस कोड की गति लगभग 4 गुना तेज है:

% python timeit.py -s 'import re' 're.findall("\"([^\"]*)\"", "SetVariables \"a\" \"b\" \"c\" ")' 
1000000 loops, best of 3: 2.37 usec per loop 

% python timeit.py '"SetVariables \"a\" \"b\" \"c\"".split("\"")[1::2];' 
1000000 loops, best of 3: 0.569 usec per loop 
संबंधित मुद्दे