web-dev-qa-db-ja.com

shlex.split()とre.split()の違いは何ですか?

そのため、最近shlex.split()を使用して、コマンドをsubprocess.Popen()関数の引数として分割しました。私は長い間、re.split()関数を使用して、特定の区切り文字を指定して文字列を分割したことを思い出しました。誰かがそれらの間の本質的な違いは何かを指摘できますか?各シナリオはどのシナリオに最適ですか?

19
swordfish

shlex.split()シェルの分割メカニズムのように機能するように設計されています です。

これは、引用符を尊重するなどのことを行うことを意味します。

_>>> 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_のように動作するように独自の正規表現を定義しようとすることは、それが可能な場合でも、不必要に複雑です。

2つの違いを実際に確認するには、いつでも se the Source、Luke を使用できます。

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

これらのファイルをお気に入りのエディターで開いてからかい始めると、まったく異なる動作をすることがわかります。

28
Wayne Werner