2016-01-08 2 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()はちょうどあなたが定義するどんなパターンに分かれます。それも可能だ場合shlex.splitのように動作する独自の正規表現を定義しようと

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

は、不必要に複雑です。実際には2つの違いを確認するには

、あなたは常にUse the Source, Lukeことができます。

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

お気に入りのエディタでこれらのファイルを開いて、チャンスをうかがっ開始し、あなたは彼らは非常に異なる動作をすることを見つけることができます。

関連する問題