2017-07-11 7 views
5

मैं निम्न पाठअजगर उद्धरण और रिक्त स्थान से पाठ विभाजित

text = 'This is "a simple" test' 

है और मैं, जिसके परिणामस्वरूप, दो तरह से यह विभाजित करने की आवश्यकता पहले उद्धरण द्वारा और उसके बाद रिक्त स्थान द्वारा:

res = ['This', 'is', '"a simple"', 'test'] 

लेकिन str.split() के साथ मैं केवल उद्धरण या रिक्त स्थान को डिलीमीटर के रूप में उपयोग करने में सक्षम हूं। क्या एकाधिक डिलीमीटर के लिए एक अंतर्निहित फ़ंक्शन है?

उत्तर

8

आप उद्धृत तार पार्स करने के लिए shlex.split, काम का उपयोग कर सकते हैं:

>>> import shlex 
>>> text = 'This is "a simple" test' 
>>> shlex.split(text, posix=False) 
['This', 'is', '"a simple"', 'test'] 

गैर POSIX मोड में ऐसा करने से विभाजित परिणाम से भीतरी उद्धरण को हटाने से बचाता है। posix डिफ़ॉल्ट रूप से True पर सेट है:

>>> shlex.split(text) 
['This', 'is', 'a simple', 'test'] 

आप पाठ के इस प्रकार के कई पंक्तियों है या आप एक धारा से पढ़ रहे हैं, तो आप कुशलतापूर्वक (उत्पादन में उद्धरण को छोड़कर) विभाजित कर सकते हैं csv.reader का उपयोग कर:

import io 
import csv 

s = io.StringIO(text.decode('utf8')) # in-memory streaming 
f = csv.reader(s, delimiter=' ', quotechar='"') 
print list(f) 
# [['This', 'is', 'a simple', 'test']] 

अजगर 3 पर, आप स्ट्रिंग यूनिकोड के रूप में सभी स्ट्रिंग्स पहले से ही यूनिकोड हैं डिकोड करने की जरूरत नहीं होगी।

1

आपके मामले के लिए shlex.split बस ठीक करेगी।

के रूप में जवाब multiple delimiters?

import re 

re.split('\"|\s', string) 
2

को अगर मैं तुम्हें सही समझते हैं, तो आप उपयोग कर सकते हैं regex

>>> import re 
>>> text = 'This is "a simple" test' 

>>> re.split('\s|\"', text)

[ 'यह', 'है', '', 'ए', 'सरल', '', 'test']

0

csv पाठक का उपयोग कर।

import csv 
text = 'This is "a simple" test' 
list_text=[] 
list_text.append(text) 
for row in csv.reader(list_text, delimiter=" "): 
    print(row) 

आप भी देख सकते here अधिक के बारे में

0

फिर से उपयोग करने का प्रयास:

import re 
text = 'This is "a simple" test' 
print(re.split('\"|\s', text)) 

परिणाम:

['This', 'is', '', 'a', 'simple', '', 'test'] 
0

आप shlex पुस्तकालय में देख सकते हैं।

from shlex import split 
a = 'This is "a simple" text' 
split(a) 

मुझे नहीं लगता कि regex आप

के लिए क्या देख रहे है [ 'यह', 'एक सरल', 'पाठ' है ']
संबंधित मुद्दे