2016-01-08 5 views
5

तो मैंने हाल ही में subprocess.Popen() फ़ंक्शन के तर्क के रूप में कमांड को विभाजित करने के लिए shlex.split() का उपयोग किया। मैंने याद किया कि लंबे समय तक मैंने एक विशिष्ट डिलीमीटर निर्दिष्ट एक स्ट्रिंग को विभाजित करने के लिए re.split() फ़ंक्शन का भी उपयोग किया था। क्या कोई बता सकता है कि उनके बीच क्या अंतर है? प्रत्येक परिदृश्य में कौन सा परिदृश्य सबसे उपयुक्त है?shlex.split() और re.split() के बीच क्या अंतर है?

+0

एक स्ट्रिंग को विभाजित करने के लिए? न तो प्रयोग करें, इसके बजाय बिल्टिन 'string.split (' delimiter ')' –

+0

@TimCastelijns का उपयोग करें, यह आप जो विभाजित करना चाहते हैं उस पर बहुत निर्भर करता है। 'string.split' सबसे सरल लेकिन कम से कम सक्षम विकल्प है। – tdelaney

उत्तर

8

shlex.split()designed to work like the shell's split mechanism है।

यह सम्मान उद्धरण की तरह कार्य करने होंगे, आदि

>>> shlex.split("this is 'my string' that --has=arguments -or=something") 
['this', 'is', 'my string', 'that', '--has=arguments', '-or=something'] 

re.split() बस जो कुछ पैटर्न पर परिभाषित विभाजित कर देगा।

>>> re.split('\s', "this is 'my string' that --has=arguments -or=something") 
['this', 'is', "'my", "string'", 'that', '--has=arguments', '-or=something'] 

shlex.split की तरह काम करने के लिए अपनी खुद की regex परिभाषित करने के लिए कोशिश कर रहा है, बेकार में जटिल है अगर यह भी संभव है। अपने पसंदीदा संपादक में इन फ़ाइलों

>>> re.__file__ 
'/usr/lib/python3.5/re.py' 
>>> shlex.__file__ 
'/usr/lib/python3.5/shlex.py' 

ओपन और चारों ओर poking शुरू करते हैं, आप पाएंगे कि वे काफी अलग ढंग से काम करते हैं:

वास्तव में, दोनों के बीच अंतर को देखने के लिए आप हमेशा Use the Source, Luke कर सकते हैं।

संबंधित मुद्दे